Рассмотрим этот код: < /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