типам аргументов) — почему этот код компилируется?
                  
                  
                  
                  
                  
                  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 у функции.
Обсуждают сегодня