类模板针对 const 和非 const 指针的部分特化

问题描述 投票:0回答:1

我正在尝试创建一个带有指针类型的非类型模板参数的类模板,它有 const 和非 const 指针两种特化。

这是我最好的尝试,被Clang和GCC接受了:

template <const int*>
struct A {};

template <int* p>
struct A<p>;

int v;
A<&v> a;

但是

A<&v>
仍然使用带有 const 指针的主模板,尽管
&v
具有类型
int*

另一方面,MSVC 打印:

error C2753: 'A<p>': partial specialization cannot match argument list for primary template

在线演示:https://godbolt.org/z/EzoYoxEza

我的部分专业化正确吗?如果是的话,我该如何使用

A<int*>

c++ pointers templates partial-specialization non-type-template-parameter
1个回答
-1
投票

这是 MSVC 中的一个错误。您可以使用以下解决方法来编译它而不会出现错误:

template <typename T, T>
struct A {};

template <int* p>
struct A<int*, p> {};

template <const int* p>
struct A<const int*, p> {};

int v;
A<int*, &v> a;
A<const int*, &v> b;

有关此错误的更多信息,您可以访问:msvc 中的非类型模板参数无法编译

© www.soinside.com 2019 - 2024. All rights reserved.