2010-04-27

deleted定義

Twitter / digitalghostの妹: int f(int); int f(double) ...

おお!

void f( int ) {}
void f( double ) = delete ;

int main()
{
    f(0) ; // OK
    f(1.0) ;// error
}

これはすごい。いままでまったく気がつかなかった。よく見たら、deleteは、Deleted definitionsという名前であった。Explicitly-defaulted functionsとは、名前からして明確に異なるのである。素晴らしいことに、deleted定義を指定できる関数に、制限はない。つまり、メンバー関数である必要すらない。

なぜ、いままでメンバー関数にしか使えないという思い込みをしていたのだろう。これは素晴らしい。

ちなみに、こういうこともできる。

void f( int ) {}

// f(int)以外すべて削除
template < typename T > void f( T ) = delete ;

int main()
{
    f(0) ; // OK
    f(1.0) ;// error
}

No comments:

Post a Comment

You can use some HTML elements, such as <b>, <i>, <a>, also, some characters need to be entity referenced such as <, > and & Your comment may need to be confirmed by blog author. Your comment will be published under GFDL 1.3 or later license with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.