widzę przykład z C++ 11 Standard (n3337, 14.8.2.3/7)Szablon typ argumentu odliczenie przez operatora konwersji
struct A {
template <class T> operator T***();
};
A a;
const int * const * const * p1 = a; // T is deduced as int, not const int
i spróbować odtworzyć go za pomocą różnych kompilatorów. Zmieniłem przykład trochę dodając oświadczenie z typu T w funkcji konwersji
struct A {
template <class T> operator T***()
{
T t; //if T==const int, then it is error (uninitialized const)
return nullptr;
}
};
A a;
const int * const * const * p1 = a;
int main(){}
Wszystkie kompilatory (VS2014, gcc 5.1.0 i 3.5.1 dzyń) dają błąd w deklaracji „T” , co oznacza, że T jest wydedukowane jako const int. Dlaczego? Czy to jakieś rozszerzenie? został
Gratulacje, znalazłeś błąd kompilatora. (To nie jest zgodne rozszerzenie: odrzuca kod, który jest dobrze uformowany zgodnie ze standardem.) –
@ T.C. Tylko [zgłaszane] (https://gc.gnu.org/bugzilla/show_bug.cgi?id=66108) to. Szkoda, że bugzilla nie pozwala ci na edycję ninja-edycję! – Barry
Zadziwiająco. Aż 3 kompilatory mają ten sam błąd :) P.S. Kompilatory icc 13.0.1 ok – user3514538