Этот вопрос возник во время моего изучения поведения decltype
и его правил определения типа выражений.Есть ли причина не продвигать общие cv-квалификаторы, если выражение имеет значение prvalue?тип.Пример: - в приведенном ниже коде выражение i+j
просто получается из decltype
как int
, а не const int
, так как const
ness является общим для обеих переменных, оно также может быть распространено на результирующее выражение,хотя само выражение является временным и не является lvalue, но когда дело доходит до деривации типа, оно может быть полезно (как в случае с выражениями с одним значением).
Существующее правило: если категория значений выраженияэто значение, тогда decltype
дает T
.
#include<iostream>
#include<string>
#include<type_traits>
using namespace std;
int main(int argc, char* argv[])
{
const int i=10;
const int j=20;
cout << is_same<decltype(i), const int>::value << "," << is_same<decltype(j), const int>::value << endl;
cout << is_same<decltype(i+j), const int>::value << "," << is_same<decltype(i+j), int>::value << endl;
return(0);
}