| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > C/C++: Общие вопросы > SFINAE |
| Автор: UnrealMan 1.12.2006, 11:17 | ||
Есть ли в стандарте информация насчёт SFINAE или же это просто особенность отдельно взятых компиляторов? Интересует, собственно, перечень конструкций, неудачное образование которых не приводит к ошибкам. Например, конструкция
может не быть корректно построенным типом из-за того, что у T нет подходящего конструктора, однако принцип SFINAE тут не работает (по крайней мере, у меня компилятор (MinGW-3.4.4) ругается, если не существует подходящего конструктора). |
| Автор: JackYF 1.12.2006, 16:18 |
А что, у нас в зависимости от выполненного конструктора меняется размер типа? sizeof(T) сложно написать??? Зачем так извращаться? |
| Автор: UnrealMan 1.12.2006, 18:58 | ||
Если бы здесь работал принцип SFINAE, то можно было бы узнать, есть подходящий контруктор у класса или нет, причём вместо ошибки компиляции (когда подходящего конструктора нет) избирать другой способ поведения программы. Да и вообще, если бы любую подобную ошибку использования типа можно было б обернуть в sizeof и на это дело распространялся принцип SFINAE, этому принципу цены б тогда не было Напомню, что принцип SFINAE (substitution failure is not an error) заключается в том, что если при инстанцировании шаблона функции составление какого-либо типа её сигнатуры терпит неудачу, то такая функция исключается из списка кандидатов по части наилучшего соотвествия среди перегруженных функций, вместо того чтобы вызывать ошибку компиляции (увы, более точного определения дать не могу, поэтому и спрашиваю о наличии подробного описания в стандарте). Например, здесь
у типа T может не быть типа-члена Type. В таком случае вторая функция будет исключена из перечня рассматриваемых при выборе наилучшего соотвествия в перегрузке. |
| Автор: Daevaorn 1.12.2006, 19:23 |
| http://en.wikipedia.org/wiki/SFINAE |
| Автор: UnrealMan 1.12.2006, 19:31 |
| Это я уже читал – там представлена довольно скудная информация. Хоть там и есть ссылка на стандарт, но стандарт-то старый (1998 года), у меня же в наличии только 2003 года. Никаких интересующих меня подробностей в этом пункте 14.8.3 я у себя не нашёл... |
| Автор: JackYF 1.12.2006, 19:50 |
Это было мне? Так я уже это просмотрел... Все... я понял. Не разобрался сначала. |
| Автор: UnrealMan 1.12.2006, 20:23 | ||||||||||||
О! Кажется, я нашёл то, что искал: похоже, все случаи изложены в 14.8.2
|