void S(){}
struct S{};
int main(){
S();
}
上記のコードでは、main の式 'S()' は、タイプ 'S' のテンポラリを作成しようとするのではなく、関数呼び出し式として扱われます。
C++ 標準のどの部分で、関数宣言を優先するような式の解決について述べていますか? 何らかの理由で、私はそれを見つけることができません。
void S(){}
struct S{};
int main(){
S();
}
上記のコードでは、main の式 'S()' は、タイプ 'S' のテンポラリを作成しようとするのではなく、関数呼び出し式として扱われます。
C++ 標準のどの部分で、関数宣言を優先するような式の解決について述べていますか? 何らかの理由で、私はそれを見つけることができません。
セクション 3.3.7/2
クラス名 (9.1) または列挙名 (7.2) は、同じスコープで宣言されたオブジェクト、関数、または列挙子の名前によって非表示にすることができます。 クラスまたは列挙名と、オブジェクト、関数、または列挙子が同じスコープで (任意の順序で) 同じ名前で宣言されている場合、クラスまたは列挙名は、オブジェクト、関数、または列挙子の名前が表示されている場所では非表示になります。
次に、そのような場合に精巧な型指定子を使用する必要があります
3.4.4/1 詳細な型指定子
名前が非型宣言 (3.3.7) によって隠されていても、事前に宣言されたクラス名または列挙名を参照するために、詳細な型指定子を使用できます。 詳細型指定子のクラス名または列挙名は、単純な識別子または修飾 ID のいずれかです。