小编Can*_*nos的帖子

Clang 声称这个(部分专门化的)模板实例化是不明确的。这样对吗?

从 clang 9.0.0 开始,所有版本的 clang 在使用 -std=c++17 (或 -std=c++20)编译时都会拒绝以下代码:

#include <utility>

template<class L, std::size_t N>
struct A;

// #1
template
    < template<class X, X...> class Holder
    , class T, T... Cst
    , std::size_t N
    >
struct A<Holder<T, Cst...>, N>;

// #2
template
    < template<class X, X...> class Holder
    , class T, T... Cst
    >
struct A<Holder<T, Cst...>, 0> {};

int main() {
    A<std::index_sequence<>, 0> a{}; // supposed to select #2
}
Run Code Online (Sandbox Code Playgroud)

据说A<std::index_sequence<>, 0>是因为实例化不明确:

<source>:20:33: error: ambiguous partial specializations …
Run Code Online (Sandbox Code Playgroud)

c++ clang template-specialization language-lawyer c++17

7
推荐指数
1
解决办法
127
查看次数