从 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)