Возможный дубликат:
decltype и скобки
Я нашел это в Википедии:
auto c = 0; // c has type int
auto d = c; // d has type int
decltype(c) e; // e has type int, the type of the entity named by c
decltype((c)) f = c; // f has type int&, because (c) is an lvalue
И используя компилятор ideone (C ++ 0x idk, что они используют) и typeinfo, я не смог увидеть diff между e и f. Очевидно, что это, вероятно, неудача с моей стороны, поэтому я хотел бы знать, является ли это окончательным стандартным поведением C ++ 11.
Да и это стандартное поведение. Это написано в §7.1.6.2 [dcl.type.simple] / 4, где:
Тип обозначается
decltype(e)
определяется следующим образом:
- если
e
является заключённый в скобки ID-выражение или доступ к элементу класса без скобок,decltype(e)
тип сущности, названной e.- …
- в противном случае, если
e
это значение,decltype(e)
являетсяT&
, гдеT
это типe
;- …
поскольку c
не имеет круглых скобок и является ID-выражение (здесь идентификатор, см. §5.1.1 [expr.prim.general] / 7), decltype(c)
будет тип c
, который int
,
поскольку (c)
имеют круглые скобки и являются lvalue (например, (c)=1
является допустимым выражением), decltype((c))
будет ссылочный тип lvalue типа (c)
, который int&
,
Других решений пока нет …