Usando um enum como uma expressão constante. Qual compilador está certo?
O código a seguir usa o membro enumm
como uma expressão constante, ou seja, como um parâmetro de modelo. O código é compilado no gcc, mas não no clang (demonstração ao vivo) Clang diz "erro: o argumento do modelo não-tipo não é uma expressão constante".
O problema pode ser resolvido trocando a linha// 1
porA<tst<p>::m> a
. Portanto, minha pergunta não é como corrigir esse problema, mas qual compilador está correto.
template<size_t n> struct A{};
template<size_t n>
struct tst
{ enum : size_t { m= n % 15 };
template<size_t p>
void
call( tst<p> const &t2 ) {
A<t2.m> a; // 1
}
};