clang-4.0.0中的一个错误?

时间:2016-10-25 14:02:34

标签: c++ templates c++17 clang++ auto

似乎clang-4.0.0的Non-type template parameters with auto type (P0127R2)实施中存在错误。这是问题所在:

// file main.cpp

template < int,  typename RR > void f1(RR&&) { }
template < auto, typename RR > void f2(RR&&) { }

class Class
{
    template < int,  typename RR > friend void f1(RR&&);
    template < auto, typename RR > friend void f2(RR&&);
};     

template < typename >
class ClassT
{
    template < int,  typename RR > friend void f1(RR&&); 
    template < auto, typename RR > friend void f2(RR&&);
};                                                

int main()
{
    f1<0>(0);
    f1<0>(Class{});
    f1<0>(ClassT<int>{});
    f2<0>(0);
    f2<0>(Class{});
    f2<0>(ClassT<int>{}); // FAILS ?!

    return 0;
}

最后一行失败,error: call to 'f2' is ambiguous指向f2的定义作为一种替代方案,并且f2的朋友声明?! ClassT作为第二种选择。像这样:

main.cpp:26:5: error: call to 'f2' is ambiguous
    f2<0>(ClassT<int>{}); // FAILS ?!
    ^~~~~
main.cpp:4:37: note: candidate function [with $0 = 0, RR = ClassT<int>]
template < auto, typename RR > void f2(RR&& ) { }
                                    ^
main.cpp:16:48: note: candidate function [with $0 = 0, RR = ClassT<int>]
    template < auto, typename RR > friend void f2(RR&&);
                                               ^
1 error generated.

这真是一个错误还是我弄错了?

我正在使用clang++ -std=c++1z main.cpp进行编译,其中clang++ --version给出了

clang version 4.0.0 (trunk 284635) (llvm/trunk 284639)
Target: x86_64-unknown-linux-gnu
Thread model: posix
InstalledDir: /usr/local/bin

0 个答案:

没有答案