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

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