funções de membro ref-qualificadas como argumentos de modelo?

Isso compila bem no clang 3.3:

template <typename T>
struct M;

template <typename R, typename C, typename... A>
struct M <R (C::*)(A...)> { };

template <typename R, typename C, typename... A>
struct M <R (C::*)(A...) &> { };

mas falha no gcc 4.8.1:

[...] error: redefinition of ‘struct M <R (C::*)(A ...)>’
 struct M <R (C::*)(A...) &> { };
        ^
[...] error: previous definition of ‘struct M <R (C::*)(A ...)>’
 struct M <R (C::*)(A...)> { };
        ^

Quando usado em diferentes contextos, isso resulta em todos os tipos de comportamento inesperado do compilador, como erros de colisão ou de compilador interno.

Eu entendo que funções membro ref-qualificadas são referidas como "referências de valor para * isto" (N2439) no padrão, e sãosuportado pelo gcc 4.8.1.

O problema aqui é usá-los como argumentos de modelo, onde o gcc não parece discriminar entre um tipo de função de membro qualificado e ref-qualificado.

implementação do clang da biblioteca std parece detectar se este recurso é suportado por

__has_feature(cxx_reference_qualified_functions)

Então, esse uso de funções qualificadas ref é padrão ou uma extensão de linguagem?

questionAnswers(1)

yourAnswerToTheQuestion