以下のコードが、どうも解せない。
namespace A { class class_in_A {} ; void f(class_in_A) { } } namespace B { void f(A::class_in_A) { } } int main() { A::class_in_A obj ; // lookup A::f via ADL. f(obj) ; { using B::f ; f(obj) ;// ambiguous. // B::F is using declaration. Y is not empty. } { using namespace B ; f(obj) ;// lookup B::f. // because it is not a using declaration, Y is empty. // GCC, MSVC, Comeau disagreed and make it ambiguous. } { using namespace B ; using B::f ; f(obj) ;// ambiguous? because it also contains using declaration? } }
規格を素直に解釈すると、こうなると思うのだが。
追記:ambiguousが正しかった。
No comments:
Post a Comment