Konu daha önce tartışılmıştı , ancak bu bir kopya değil.
Birisi decltype(a)
ve arasındaki farkı sorduğunda decltype((a))
, normal cevap - a
bir değişkendir, (a)
bir ifadedir. Bu cevabı tatmin edici bulmuyorum.
Birincisi, a
bir ifadedir. Birincil ifade seçenekleri arasında, diğerleri arasında -
- (ifade)
- id-ifadesi
Daha da önemlisi, decltype ifadesi parantezleri çok, çok açık bir şekilde ele alır :
For an expression e, the type denoted by decltype(e) is defined as follows:
(1.1) if e is an unparenthesized id-expression naming a structured binding, ...
(1.2) otherwise, if e is an unparenthesized id-expression naming a non-type template-parameter, ...
(1.3) otherwise, if e is an unparenthesized id-expression or an unparenthesized class member access, ...
(1.4) otherwise, ...
Yani soru kalıyor. Parantezler neden farklı muamele görüyor? Teknik belgeleri veya komite tartışmalarını bilen var mı? Parantezler için açık bir değerlendirme, bunun bir gözetim olmadığını düşünmeye neden olur, bu yüzden eksik olduğum teknik bir neden olmalı.
(a)
bir ifadesidir vea
bir ifadesidir ve değişken".