#include <type_traits>
using namespace std;
template<class T, class = typename enable_if<is_same<T, char>::value>::type> // OK
struct A {};
#define ENABLE_IF(expr) class = typename enable_if<expr>::type
template<class T, ENABLE_IF((is_same<T, char>::value))> // OK
struct B {};
template<class T, ENABLE_IF(is_same<T, char>::value)> // warning C4002 and error C1004
struct C {};
int main()
{}
私のコンパイラは VC++ 2013 RC です。
マクロENABLE_IF(x)
が期待どおりに動作しません:
警告 C4002: マクロ 'ENABLE_IF' の実際のパラメーターが多すぎて致命的です
エラー C1004: 予期しないファイルの終わりが見つかりました
それでもENABLE_IF((x))
うまく動作します。
なんで?