Consider the code:
#include <iostream>
struct Foo
{
Foo(int){}
operator bool() const
{
return true;
}
};
int main()
{
if(Foo foo{42})
{
std::cout << "ok\n";
}
}
It compiles fine under gcc5. However, if I replace the line if(Foo foo{42})
with
if(Foo foo(42))
I get a compile-time error:
error: expected primary-expression before 'foo'
What's going on here? There is no vexing parse imo, so why using braces work?