c++ - 变量模板的部分专业化
解决方案
是的,根据[temp.arg.template]/2:
当实例化基于模板模板参数的特化时,会考虑与主类模板或主变量模板关联的任何部分特化。...
...类模板的部分特化声明、变量模板、非模板类的成员类模板、非模板类的静态数据成员模板、类模板的成员类模板等的放置...
它还在[constraints.namespace.std]/3中提到:
如果 C++ 程序声明任何标准库变量模板的显式或部分特化,则其行为是未定义的,除非该变量模板的规范明确允许。
更不用说所有主要的编译器(Clang、GCC 和 MSVC)都没有问题:
template <int x, int y>
constexpr int foo = -1;
template <>
constexpr float foo<1, 0> = 1.0;
template <int x>
constexpr double foo<1, x> = 1.1;
int main()
{
static_assert(foo<0, 0> == -1, "");
static_assert(foo<0, 1> == -1, "");
static_assert(foo<1, 0> == 1.0, "");
static_assert(foo<1, 1> == 1.1, "");
}
推荐阅读
- r - 为每个 facet_grid 图添加 y 轴标签
- c# - 当用户增加 SQL 数据库大小时接收通知
- python - 如何找到 np.partition() 的实际实现?
- c# - 如何从 IdentityUser 在 .NET Core 2.1 中将人员全局添加到 Rollbar
- c - 使用位域初始化结构的常量数组
- javascript - 如何从不同来源的 CORS 中获取数据?
- python - Python 请求错误('Connection aborted.', OSError(0, 'error'))和规模的连接超时
- php - Laravel 5.8 尝试从数据库中查询阿拉伯语记录
- vue.js - Vuex mapMutations 没有按预期工作
- hadoop - 如何找到 Parquet 文件生成时使用的 COMPRESSION_CODEC?