我有以下代码,我不明白为什么这会用clang 3.5编译
/** Greates common divisor */
template<bool argsPositive = false,
typename T
>
typename std::enable_if<std::is_integral<T>::value,T >::type
gcd2( T a, T b )
{
if(!argsPositive){
a = std::abs( a );
b = std::abs( b );
}
if( a == 0 || a == b ){
return b;
}
if( b == 0 ){
return a;
}
if( a > b ){
return gcd2<true,T>( a % b, b );
}
else{
return gcd2<true,T>( a, b % a );
}
}
这个代码,其中enable_if在模板参数声明中,导致一个递归的实例化循环,编译器崩溃:
/** Greates common divisor */
template<bool argsPositive = false,
typename T,
typename std::enable_if<std::is_integral<T>::value>::type * = nullptr
>
T gcd2( T a, T b )
{
....
}
这是一个编译器错误,GCC编译正常:LINK