chamada de sobrecarregado com a função de membro ref-qualifiers é ambígua

Eu encontrei um comportamento estranho ao completar meu código comG ++ (gcc 4.8.1 eMinGW 4.8.2 com-std=gnu++1y bandeira). No espírito do SSCCE, isolei o seguinte trecho:

struct C
{

    template< typename X >
    auto
    f(X &&) const &
    { ; }

    template< typename X >
    auto
    f(X &&) &
    { ; }

    template< typename X >
    auto
    f(X &&) &&
    { ; }

};

int main()
{
    int i{};
#if 1
    C{}.f(i);
#endif
#if 1
    C c{};
    c.f(i);
#endif
    return 0;
}

Dá um erro:

main.cpp: In function 'int main()':
main.cpp:29:10: error: call of overloaded 'f(int&)' is ambiguous
     c.f(i);
          ^
main.cpp:29:10: note: candidates are:
main.cpp:6:5: note: auto C::f(X&&) const & [with X = int&]
     f(X &&) const &
     ^
main.cpp:11:5: note: auto C::f(X&&) & [with X = int&]
     f(X &&) &
     ^
main.cpp:16:5: note: auto C::f(X&&) && [with X = int&]
     f(X &&) &&
     ^

Mas no caso de#if 1 e#if 0ou#if 0 e#if 1 compila normalmente. Além disso, se eu substituir todosautoestá comvoidtambém compila com êxito.

É bug, ou apenas meu engano?

questionAnswers(1)

yourAnswerToTheQuestion