Dlaczego kompilator interpretuje ten wiersz jako definicji funkcji, a nie jako definicji zmiennej:Definicja funkcji lub definicja zmiennej?
Y y(X());
w poniższym kodzie:
#include <iostream>
struct X {
X() { std::cout << "X"; }
};
struct Y {
Y(const X &x) { std::cout << "Y"; }
void f() { std::cout << "f"; }
};
int main() {
Y y(X());
y.f();
}
VS2010 daje następujący błąd na linii „YF() ; "
left of '.f' must have class/struct/union
Która część normy opisuje to zachowanie? Odpowiedź na pytanie nie daje szczegółów o tym: Most vexing parse
To nie jest błąd kompilatora. To najbardziej irytujący problem z analizą, sprytnie ukryty. – Bathsheba
Zagłosowano na ponowne otwarcie w oparciu o edycję - cytat z normy byłby w rzeczywistości użyteczny. 6.8 mówi o disamiguating wypowiedzi wyrażenie kontra deklaracje, ale najbardziej denerwujące przetwarzanie jest w rzeczywistości dwuznaczność między dwie deklaracje. – Angew