タイトルは、マーシャル・クラインによる有名なサイトC++FAQに由来しています。
著者は、次の2つのコード例には違いがあると主張しています。
Listがクラスの名前であるとします。次に、関数f()はxと呼ばれるローカルListオブジェクトを宣言します。
void f()
{
List x; // Local object named x (of class List)
...
}
ただし、関数g()は、リストを返すx()という関数を宣言します。
void g()
{
List x(); // Function named x (that returns a List)
...
}
しかし、2番目のバリアントを使用するのは本当に間違っていますか?
そして、それが本当に宣言である場合、コンパイラは、関数内で関数を宣言できないと文句を言うのではないでしょうか。