テンプレート条件に使用しようとしている構造体をテストしていますが、奇妙なコンパイルエラーが発生しています。ここに私のコードは次のとおりです。boolとsizeof条件付きテンプレート
#include <type_traits>
#include <string>
template<typename T1, typename T2,
bool SAME_SIZE = (sizeof(T1)==sizeof(T2))>
struct same_size
{
typedef typename std::false_type value;
};
template<typename T1, typename T2>
struct same_size<T1, T2, true>
{
typedef typename std::true_type value;
};
int main()
{
if(same_size<char,unsigned char>::value)
{
printf("yes");
}
system("PAUSE");
}
私は、Visual Studioで2015年までこれらを、これをコンパイルしてる私が手コンパイルエラーです:
1> main.cpp
1>c:\users\luis\documents\visual studio 2015\projects\stringtype\stringtype\main.cpp(18): error C2059: syntax error: ')'
1>c:\users\luis\documents\visual studio 2015\projects\stringtype\stringtype\main.cpp(19): error C2143: syntax error: missing ';' before '{'
誰もがここで何が起こっているかのよういくつかの光を当てることができますか?
'typedef'に' typename'を入れる必要はありません。あなたのエラーを修正する別の方法は、 'value' - ' if(same_size :: value {}) 'をインスタンス化することですが、セルゲイの答えはこれを修正する正しい方法です。 –
Praetorian