В чем причина предоставления для тестеров SFINAE нулевого значения по умолчанию?C++

Программы на C++. Форум разработчиков
Ответить Пред. темаСлед. тема
Anonymous
 В чем причина предоставления для тестеров SFINAE нулевого значения по умолчанию?

Сообщение Anonymous »

Я заметил, что большая часть boost и libc++/libstdc++ явно предоставляют нулевое значение по умолчанию для SFINAE в коде типа

Код: Выделить всё

// libc++ http://llvm.org/svn/llvm-project/libcxx/trunk/include/memory
namespace __has_pointer_type_imp
{
template  static __two __test(...);
template  static char __test(typename _Up::pointer* = 0);
}

template 
struct __has_pointer_type
: public integral_constant
{
};
Однако меня смущает, почему этого следует ожидать, когда они явно выполняют вызов с 0. Я помню, что где-то слышал, что это была оптимизация (чтобы ускорить компилятор, когда создание экземпляра шаблона), но я не совсем понимаю, как это будет работать. Я просмотрел стандарт, и там есть раздел, в котором кратко описывается, что происходит с аргументами по умолчанию в отношении вывода аргументов шаблона.

14.8.2 >


В определенных моментах процесса вывода аргументов шаблона необходимо взять тип функции, который использует параметры шаблона, и заменить их шаблоном. параметры с соответствующими аргументами шаблона. Это делается в начале вывода аргументов шаблона, когда любые явно указанные аргументы шаблона подставляются в тип функции, и снова в конце вывода аргументов шаблона, когда подставляются любые аргументы шаблона, которые были выведены или получены из аргументов по умолчанию.


Последнее слово, касающееся моего вопроса


и еще раз в конце вывода аргументов шаблона, когда подставляются любые аргументы шаблона, которые были выведены или получены из аргументов по умолчанию.


Однако это звучит как противоположность оптимизации, если ей приходится выполнять больше работы. Есть ли у кого-нибудь какие-либо аргументы, почему здесь должен быть 0, он работает и без него, но каждый пример SFINAE в libc++, по крайней мере, кажется, явно помещает туда 0, хотя они никогда не вызывают функцию без аргументов.

Подробнее здесь: https://stackoverflow.com/questions/264 ... ae-testers
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C++»