Код: Выделить всё
template void Do(T arg) { (void)arg->b; }
namespace A {
struct Foo { int a; };
}
namespace B {
struct Foo { int b; };
struct Bar : A::Foo {
void Blah() { Do((Foo *)0); }
};
}
Код: Выделить всё
namespacebug.cpp: In instantiation of ‘void Do(T) [with T = A::Foo*]’:
namespacebug.cpp:10:34: required from here
namespacebug.cpp:1:39: error: ‘struct A::Foo’ has no member named ‘b’
template void Do(T arg) { (void)arg->b; }
^
Код: Выделить всё
: A::FooПохоже, это говорит о том, что наследование от A::Foo каким-то образом переносит его в мое пространство имен и сопоставляет его с моим использованием Foo? Какая «функция» C++ вызывает это?
(Конечно, эту проблему можно легко решить, создав пространство имен при использовании Foo, но вопрос не в этом.)
Подробнее здесь: https://stackoverflow.com/questions/306 ... -namespace
Мобильная версия