Посмотрите следующий код (написанный просто для удовольствия)
namespace N
{
template<typename T>
struct K
{
};
}
template<typename T>
struct X
{
typename T::template K<T> *p; //should give error
//N::K<int> has no template member named `K`
};
int main()
{
X<N::K<int> > l;
}
Код компилируется на g++ (4.5.1) и Clang, тогда как Comeau и Intel С++ дают (похожие) ошибки.
Ошибки, которые я получаю от Комо, следующие:
"ComeauTest.c", line 13: error: class "N::K<int>" has no member "K"
typename T::template K<T> *p;
^
detected during instantiation of class "X<T> [with T=N::K<int>]" at
line 18
"ComeauTest.c", line 13: error: expected an identifier
typename T::template K<T> *p;
^
detected during instantiation of class "X<T> [with T=N::K<int>]" at
line 18
Итак, мой вопрос: "Является ли образец кода плохо сформированным?" По словам меня "Да". Означает ли это, что это еще одна ошибка в g++/Clang?