using宣言は既に宣言済みの名前だけを現在のスコープに取り込みます。
#include <iostream> namespace A { void f(double) { std::cout << "f(double)" << std::endl; } } using A::f; namespace A { void f(int) { std::cout << "f(int)" << std::endl; } } int main() { f(0); // 暗黙の型変換後、f(int)ではなくf(double)を呼び出す }
実行結果
f(double) 続行するには何かキーを押してください . . .
一方usingディレクティブはその名前空間で宣言された全ての名前を現在のスコープに取り込みます。
#include <iostream> namespace A { void f(double) { std::cout << "f(double)" << std::endl; } } using namespace A; namespace A { void f(int) { std::cout << "f(int)" << std::endl; } } int main() { f(0); // f(int)を呼び出す }
実行結果
f(int) 続行するには何かキーを押してください . . .