{ return 5; }
                  
                  
                  
                  
                  
                  int main() {
                  
                  
                      printf("%s", typeid(decltype(f(declval<int>()))).name());
                  
                  
                     return 0;
                  
                  
                  }
                  
                  
                  Почему нельзя вместо declval<int>() написать просто int.
                  
                  
                
cpp code: printf("%s", typeid(int).name()); output: i
Не int, а int{}
Смотри declval типа создаёт значение заданного типа И таким образом происходит "вызов" функции decltype(f(declval<int>())) Это значит примерно возьми тип возвращаемого значения функции f, если вызвать её с int
внутри decltype unevaluated context, поэтому можно писать что угодно, например, вызов функции f(int) -- она не будет вызвана, но чтобы в аргументы вызова добавить int, его не создавая, это вот таким образом делается
Обсуждают сегодня