私は型と初期値で動作するいくつかのマクロを持っています。初期値vIni
をvType
にキャストする必要があります(vIni
はいつもvType
に変換可能ですが、同じ種類の場合もあります)。 vIni
も空である可能性があります。その場合は、vType
を初期化しないか、デフォルトで初期化する必要があります。 reultはテンプレート関数に渡されます。要するにC++ 11で `someType()`で初期化できない一時ファイルはどれですか?
、
template<typename T> void foo(const T& o);
foo(vType(vIni));
foo(vType());
をコンパイルする必要があります。
私はすでにfoo(unsigned int())
またはfoo(int*())
がコンパイルできないことを発見し、それはtypedefをして回避することができます。
(スペースとポインタを持つ組み込み型に加えて)失敗するケースは他にありますか?
明らかに、 'void()'ですが、正確な構文よりも 'void'オブジェクトを持つことはできません。 – MSalters
http://stackoverflow.com/questions/4669131/how-to-check-if-a-template-argument-is-default-constructibleの重複の可能性もあります。 http://en.cppreference。com/w/cpp/types/is_default_constructible –
@ChristopherCreutzig:これは私の言う限りではこの質問に関するものではありません。これは実際に型自体についてではなく、型の名前付けの仕方です(したがって、 "typedefで回避できます")。確かにその偽装された偽装に対する答えは、この質問に全く答えません。 –