типам аргументов) — почему этот код компилируется?
using filter = tuple<int, double>;
template <class T, class = decltype(get<T>(declval<filter>()))>
struct s {};
s<int> s1;
s<char> s2; // компилирутеся
Предполагаю, что играет роль unevaluated context decltype, и get<T> не инстанцируется (что должно привести к ошибке компиляции).
SFINAE
Потому что компилятор не будет инстанциировать саму функцию get, decltype просто возьмет return type у функции.
Обсуждают сегодня