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 0
ou#if 0
e#if 1
compila normalmente. Além disso, se eu substituir todosauto
está comvoid
também compila com êxito.
É bug, ou apenas meu engano?