このコードがコンパイルされるとは思っていませんでしたが、コンパイルされます。私の理解では、func(d)
「func」と呼ばれる関数のグローバル名前空間だけでなく、渡されたパラメーターの名前空間も検索します(引数依存の検索)
ただし、この場合、パラメーターはグローバル名前空間にあります。では、なぜ ns 名前空間で "func" が見つかるのでしょうか? パラメーターの型が typedef の場合、実際のパラメーターの名前空間ではなく、基になる型の名前空間を使用するという特別な規則はありますか?
これは本当のようですが、これをサポートするものは何も見つかりません...それは予想される動作ですか?
namespace ns
{
struct data {};
void func(ns::data item) {}
};
// Create an alias "datatype" in the global namespace for ns::data
typedef ns::data datatype;
int main()
{
datatype d;
func(d);
}