{ 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, его не создавая, это вот таким образом делается
Обсуждают сегодня