O tamanho de aninhado duas vezes pode ser uma expressão dependente?

Notei que o gcc 5.0 rejeita o código a seguir, enquanto o clang 3.6 o aceita.

template<int n>
struct I
{
    typedef int Type;
};

template<typename T>
struct A
{
    typedef I<sizeof(sizeof(T))>::Type Type;
};

Os dois compiladores parecem diferir sesizeof(sizeof(T)) é uma expressão dependente de tipo ou dependente de valor. Se a expressão fosse dependente, segue-se queI<sizeof(sizeof(T))> é um tipo dependente, o que significa quetypename deve ser necessário.

Isso é coberto pelo seguinte texto no padrão C ++ 11:

[temp.dep.type] / 8

Um tipo é dependente se for

um ID-modelo simples, no qual o nome do modelo é um parâmetro do modelo ouqualquer um dos argumentos do modelo é um tipo dependente ou uma expressão que depende do tipo ou depende do valor

[temp.dep.expr] / 4

As expressões dos seguintes formulários nunca dependem do tipo (porque o tipo da expressão não pode ser dependente):

sizeof unary-expression
sizeof ( type-id )

[temp.dep.constexpr] / 2

Expressões da seguinte forma dependem de valor se a expressão unária ou expressão for digitada independente ou a identificação de tipo for dependente:

sizeof unary-expression
sizeof ( type-id )

Minha interpretação é quesizeof(T) nunca pode ser dependente do tipo, o que significasizeof(sizeof(T)) nunca pode ser dependente de tipo ou de valor.

Isso é um bug no gcc?

questionAnswers(1)

yourAnswerToTheQuestion