Типы возврата могут быть квалифицированы CV, только если это тип класса?C++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Типы возврата могут быть квалифицированы CV, только если это тип класса?

Сообщение Anonymous »

Из приведенной ниже программы я узнал, что, если я объявляю функцию с помощью CV-квалифицированного типа возврата,

[*] Возвратный тип точно отражается в типе функции (см. 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>
Онлайн демо. Обратите внимание, что возвращение с летучими 
типами устарело с C ++ 20, см. Здесь.

Подробнее здесь: https://stackoverflow.com/questions/797 ... class-type
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»