Я вижу пример из С++ 11 Standard (n3337, 14.8.2.3/7)
struct A {
template <class T> operator T***();
};
A a;
const int * const * const * p1 = a; // T is deduced as int, not const int
и попытайтесь воспроизвести его разными компиляторами. Я немного изменил этот пример, добавив объявление с типом T в функцию преобразования
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(){}
Все компиляторы (VS2014, gcc 5.1.0 и clang 3.5.1) дают ошибку в объявлении "t", что означает, что T выводится как const int. Почему это? Это расширение?