Я только что прочитал эту статью: развлечение с именами C ++
, где автор показывает, что компилятор перестает искать перегрузки при встрече с первой, здесь с использованием пространств имен. < /p>
namespace A
{
void f(int x); // like our std::sqrt(double)
}
namespace B
{
struct S {}; // user-defined type with associated namespace B
void f(S);
void f(int, int);
void test1()
{
using namespace A; // using DIRECTIVE
f(1); // ERROR namespace A is not considered because
// B contains two overloads for 'f'
f(1,2); // OK B::f(int,int)
f(B::S()); // OK B::f(S)
}
void test2()
{
using A::f; // using DECLARATION
f(1); // OK A::f(int)
f(1,2); // ERROR A::f hides B::f(int,int)
f(B::S()); // OK B::f(S) due to ADL!
}
}
namespace C
{
void test3()
{
using namespace A; // using DIRECTIVE
f(1); // OK A::f(int)
f(B::S()); // OK B::f(S) due to ADL!
}
void test4()
{
using A::f; // using DECLARATION
f(1); // OK A::f(int)
f(B::S()); // OK B::f(S) due to ADL!
}
}
< /code>
Почему компилятор должен остановиться? Почему стандарт так говорит? < /P>
Спасибо за все ответы! < /P>
Подробнее здесь: https://stackoverflow.com/questions/243 ... -overloads
Почему компилятор останавливает поиск имени на перегрузках? ⇐ C++
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Различение однородных и гетерогенных кортежей в перегрузках функций Python
Anonymous » » в форуме Python - 0 Ответы
- 18 Просмотры
-
Последнее сообщение Anonymous
-