sixzone11 / TaskSystem

0 stars 0 forks source link

ADL 해결 #10

Open sixzone11 opened 4 months ago

sixzone11 commented 4 months ago

Argument-Dependent Lookup 때문에 namespace에 move를 넣어둔 곳들에서 ambiguous call error가 발생함.


namespace user_defined
{
    template<typename T>
    remove_reference_t<T> move(T&& lhs);

    std::tuple<...> foo();
    void bar(std::tuple<...>&& arg);

    void example()
    {
        std::tuple<...> a = foo();
        bar( move( a ) ); // error
    }
}
sixzone11 commented 4 months ago

9 를 해결하는 아이디어로 TaskWriter의 define*() 들이 반환할 타입이 직접적인 std::tuple<>이 아니라 TaskDefine<std::tuple<...>> 형태의 새로운 타입으로 반환됨. 이러면 해당 타입은 ADL에 대해 std namespace로 탐색되지 않도록 막을 수 있음.