SFINAE ?
От: Lorenzo_LAMAS  
Дата: 29.07.05 09:36
Оценка:
При наличии вызова функции, в процессе разрешения перегрузки, компилятор может инстанцировать объявления функций-шаблонов.
Допустим, есть 2 объявления:

template<class T> typename T::type_t fun(T t);
void fun(int){}

int main()
{
   fun(10);
}


такая программа компилится. Т.е. тут попытка сгенерить int::type_t к ошибке не приводит (это СФИНАЕ или нет?)


template<class T>
struct traits
{
   typedef typename T::type_t type_t;
};

template<class T>
typename traits<T>::type_t fun(T t);

void fun(int){}

int main()
{
    fun(int);
}


А вот это уже не компилится. Почему же здесь не сработал тот же принцип, что и в предыдущем случае?
Of course, the code must be complete enough to compile and link.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.