g ++ i clang ++ różne zachowanie ze zintegrowanym parametrem szablonu
Mam następujący kod C ++ 11.
#include <type_traits>
using IntType = unsigned long long;
template <IntType N> struct Int {};
template <class T>
struct is_int : std::false_type {};
template <long long N>
struct is_int<Int<N>> : std::true_type {};
int main()
{
static_assert (is_int<Int<0>>::value, "");
return 0;
}
Clang ++ 3.3 kompiluje kod, ale na g ++ 4.8.2 statyczna asercja kończy się niepowodzeniem
$ g++ -std=c++11 main.cpp
main.cpp: In function ‘int main()’:
main.cpp:15:5: error: static assertion failed:
static_assert (is_int<Int<0>>::value, "");
^
$
Problem jest spowodowany przez różne integralne parametry szablonu. Który kompilator ma rację w tym przypadku?