do wyrażenia E, typ oznaczona decltype (E) jest zdefiniowana jako następująco:
jeżeli e jest unparenthesized ID ekspresja nazewnictwa lwartością lub odniesienia wprowadzanego z listy identyfikacyjnej deklaracji dekompozycji , decltype (e) jest typem referencyjnym podanym w specyfikacji deklaracji dekompozycji ([dcl.decomp]);
w przeciwnym razie, jeśli e jest nieprostnym wyrażeniem id lub nieprywatnym dostępem do klasy ([expr.ref]), decltype (e) jest typem podmiotu nazwanego przez e. Jeśli nie ma takiego obiektu lub jeśli e nazywa zestaw przeciążonych funkcji, program jest źle sformułowany;
w przeciwnym razie, jeśli e jest wartością x, decltype (e) to T & &, gdzie T jest typem e;
w przeciwnym razie, jeśli e jest lwartością, decltype (e) to T &, gdzie T jest typem e;
inaczej, decltype (e) jest typem e.
Operand specyfikatora decltype jest operatorem nieuzgodnionym (klauzula [wyrażenie]).
'std :: type_info :: name()' nie gwarantuje niczego niezawodnego. Czy daje coś innego w innych przypadkach? – StoryTeller
@StoryTeller Usunąłem 'typ_info' z pytania. Mam nadzieję, że pomoże to wyjaśnić problem. To jest pytanie o 'decltype' i co jest wymagane, po prostu próbowałem użyć' type_info', aby zademonstrować pytanie. –
'decltype' nie potrzebuje pełnej definicji funkcji, aby poznać wynikowy typ. ([Zobacz] (http://ideone.com/eHSQ92)). Nie ma więc powodu, aby kompilować coś innego niż prototyp. Ale nie mam standardowego cytatu. – StoryTeller