编译器之间的嵌套模板类参数推导差异

下面的示例在gcc和msvc中都可以正常编译:

template <typename>
struct Foo {
    template <typename T>
    struct Bar {
        Bar(T val): 
            val_(val) 
        {             
        }

        T val_;
    };
};

auto func() {
    return Foo<int>::Bar(3);
}

在clang中似乎需要一个额外的推导指南,以便编译:

template <typename>
struct Foo {
    template <typename T>
    struct Bar {
        Bar(T val): 
            val_(val) 
        {             
        }

        T val_;
    };

    template <typename T>
    Bar(T) -> Bar<T>; // deduction guide
};

auto func() {
    return Foo<int>::Bar(3);
}

这个额外要求背后有什么理由吗?或者只是对标准中不清楚的东西的解释有所不同?

以上是编译器之间的嵌套模板类参数推导差异的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>