2016-04-01 7 views
-1

いくつかの演算子が特定の型に対して定義されているかどうかをチェックし、式の戻り値の型もチェックするいくつかのテンプレートがあります。特定の型でこのテンプレートをインスタンス化すると、すべてが正常ですが、一部の型ではMSVCで内部コンパイラエラーが発生します。 GCCでは、 "テンプレート引数が無効です"というエラーが表示されます。ポストインクリメントチェックをインスタンス化するときに問題を引き起こす行は次のとおりです。C++ネストされたテンプレートのエラー

template <typename _Type, typename _ReturnType> 
static auto test(_Type&& var, _ReturnType&&) 
-> decltype(std::enable_if_t<std::is_same<_ReturnType, decltype((var) OPERATOR)>>(), std::true_type()); 

このコードに問題はありますか?

注:OPERATORはオペレータにマクロが展開されています。確認したいです。テンプレート全体は、コードの繰り返しを避けるために使用するより大きなマクロの一部です。

+0

[最小限の完全で検証可能な例](http://stackoverflow.com/help/mcve)を投稿してください。 –

答えて

0

std::enable_if_tboolを期待していますが、std::is_sameからは入力しないと問題があると思います。 std::is_sameの結果を得るには、変数valueにアクセスする必要があります(チェックの結果があります)。

template <typename _Type, typename _ReturnType> 
static auto test(_Type&& var, _ReturnType&&) 
-> decltype(std::enable_if_t<std::is_same<_ReturnType, decltype((var) OPERATOR)>::value>(), std::true_type()); 
+0

':: value'の値を返すために型を入力しないで' operator() 'を定義しますか? – Rerito

+0

@Rerito彼らはそうですが、C++ 14以降のみです。 – Rakete1111

関連する問題