![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Есть ли в стандарте информация насчёт SFINAE или же это просто особенность отдельно взятых компиляторов? Интересует, собственно, перечень конструкций, неудачное образование которых не приводит к ошибкам. Например, конструкция
может не быть корректно построенным типом из-за того, что у T нет подходящего конструктора, однако принцип SFINAE тут не работает (по крайней мере, у меня компилятор (MinGW-3.4.4) ругается, если не существует подходящего конструктора). |
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
А что, у нас в зависимости от выполненного конструктора меняется размер типа? sizeof(T) сложно написать??? Зачем так извращаться? |
|||
|
||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Если бы здесь работал принцип SFINAE, то можно было бы узнать, есть подходящий контруктор у класса или нет, причём вместо ошибки компиляции (когда подходящего конструктора нет) избирать другой способ поведения программы. Да и вообще, если бы любую подобную ошибку использования типа можно было б обернуть в sizeof и на это дело распространялся принцип SFINAE, этому принципу цены б тогда не было Напомню, что принцип SFINAE (substitution failure is not an error) заключается в том, что если при инстанцировании шаблона функции составление какого-либо типа её сигнатуры терпит неудачу, то такая функция исключается из списка кандидатов по части наилучшего соотвествия среди перегруженных функций, вместо того чтобы вызывать ошибку компиляции (увы, более точного определения дать не могу, поэтому и спрашиваю о наличии подробного описания в стандарте). Например, здесь
у типа T может не быть типа-члена Type. В таком случае вторая функция будет исключена из перечня рассматриваемых при выборе наилучшего соотвествия в перегрузке. |
|||
|
||||
| Daevaorn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2155 Регистрация: 29.11.2004 Где: Москва Репутация: 51 Всего: 70 |
||||
|
||||
| UnrealMan |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
Это я уже читал – там представлена довольно скудная информация. Хоть там и есть ссылка на стандарт, но стандарт-то старый (1998 года), у меня же в наличии только 2003 года. Никаких интересующих меня подробностей в этом пункте 14.8.3 я у себя не нашёл...
|
|||
|
||||
| JackYF |
|
|||
![]() полуавантюрист ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 5814 Регистрация: 28.8.2004 Где: страна тысячи озё р Репутация: 18 Всего: 162 |
Это было мне? Так я уже это просмотрел... Все... я понял. Не разобрался сначала. |
|||
|
||||
| UnrealMan |
|
||||||||||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 722 Регистрация: 30.3.2006 Репутация: 27 Всего: 32 |
О! Кажется, я нашёл то, что искал: похоже, все случаи изложены в 14.8.2
|
||||||||||||
|
|||||||||||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |