most vexing parse

The most vexing parse is a syntactic ambiguity resolution in C++. In certain situations, the C++ grammar cannot distinguish between the creation of an object parameter and specification of a function's type. In those situations, the compiler is required to interpret the line as a function type specification.
```
#include <iostream>
using namespace std;

struct X {
  X() { }
};

struct Y {
  Y(const X &x) { }
};

int main() {
  // a function y1, returning an object of type Y, 
  // taking a function (with no arguments, returning an object of type X) as its argument.    
  Y y1(X()); 
  
  // a variable definition
  Y y2(X{});
}

```