которой объявлено поле-указатель myField. Как получить тип этого поля с помощью decltype? Например, внутри функции myfunc(MyType_t* arg), можно сделать так: decltype(*arg->myField). А как обойтись без объявления переменных? Пытаюсь так: using MyNewType = decltype(decltype(*MyType_t)::myField) - говорит, type name is not allowed.
Оберните код в теги: 3 символа ` до и после кода (в случае одиночной конструкции достаточно 1 ` с обеих сторон). Спасибо!
Ну правильно ругаются: decltype ведь определяет тип по имени переменной, а ты ему его на вход пытаешься передать :) Твой код можно заставить работать как-то так: using MyNewType = decltype(std::declval<MyType_t>().myField); (declval - "обратная" по отношению к decltype функция, делающая вид, что может создавать любой объект по его типу, даже если у него нет публичных конструкторов и по-другому создать его никак нельзя, работает, конечно, только в unevaluated контексте) Не удивлюсь, если и без declval можно обойтись, но я что-то не могу сообразить,как =(
Обсуждают сегодня