[*] Возвратный тип точно отражается в типе функции (см. 1 st группа static_assert , но
, если функция, изначальная, но nember emer> emer>
теряет резюме-квалификатор для встроенных типов и сохраняет его только для типов классов (см. Группу 2 nd static_assert .
Код: Выделить всё
#include
template
struct ReturnTypeT;
template
struct ReturnTypeT : std::type_identity {};
template
using ReturnType = ReturnTypeT::type;
enum MyEnum {};
class MyClass {};
template
T returnT();
#define ASSERT_SAME(T1, T2) static_assert(std::is_same_v)
ASSERT_SAME(ReturnType< returnT >, const int);
ASSERT_SAME(ReturnType< returnT >, const MyEnum);
ASSERT_SAME(ReturnType< returnT >, const MyClass);
ASSERT_SAME(ReturnType< returnT >, volatile int);
ASSERT_SAME(ReturnType< returnT >, volatile MyEnum);
ASSERT_SAME(ReturnType< returnT >, volatile MyClass);
ASSERT_SAME(decltype( returnT() ), /*?*/ int);
ASSERT_SAME(decltype( returnT() ), /*?*/ MyEnum);
ASSERT_SAME(decltype( returnT() ), const MyClass);
ASSERT_SAME(decltype( returnT() ), /*????*/ int);
ASSERT_SAME(decltype( returnT() ), /*????*/ MyEnum);
ASSERT_SAME(decltype( returnT() ), volatile MyClass);
< /code>
Онлайн демо. Обратите внимание, что возвращение с летучими Подробнее здесь: https://stackoverflow.com/questions/797 ... class-type
Мобильная версия