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: