Sfinae не удается с референтным аргументом, не являющимися шаблоном.C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Sfinae не удается с референтным аргументом, не являющимися шаблоном.

Сообщение Anonymous »

Рассмотрим этот код: < /p>

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

constexpr int XX = 10;

template < auto& II > struct Ban { };
template < auto& II >
std:: true_type test(Ban*);
std::false_type test(...);
< /code>

и: < /p>

using BB = decltype(test(std::declval()));
Здесь я ожидаю, что bb будет std :: true_type , но это std :: false_type как для gcc-8.3 , так и clang-8.0 . Является ли это ошибкой в ​​этих компиляторах? Также обратите внимание, что для GCC ситуация одинакова, если я использую int const вместо Auto , так что int const & приводит к std :: false_type , в то время как int const wits to std :: true_type , в то время как для clang int & yields: std_ std: Вы можете найти живой пример здесь. < /P>

Есть ли обходной путь для выполнения такого рода Sfinae с шаблоном ссылки без типа? Дело в том, чтобы иметь утилиту, подобную IsinstantiationOfban .

Подробнее здесь: https://stackoverflow.com/questions/570 ... e-argument
Ответить

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

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

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

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

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