gpt4 book ai didi

c++ - 具有非类型模板参数的函数模板中的 static_assert

转载 作者:太空宇宙 更新时间:2023-11-04 15:11:40 25 4
gpt4 key购买 nike

我有一个带有整数模板参数的函数模板。我只想提供特定整数的实现。尝试将函数模板与另一个参数一起使用会导致编译错误。

我以下面介绍的方式使用了 static_assert

#include <type_traits>
#include <iostream>

template <typename T>
struct false_type : public std::false_type {};

template <int T>
void function() {
static_assert(false_type<decltype(T)>::value, "Error");
};

template <>
void function<1>() {
std::cout << 1 << std::endl;
}

int main() {
function<1>();
}

代码在 gcc 9.1 之前运行良好,它给出了一个 error: static assertion failed

我想知道是否有一种技术可以实现我的目标并且与 gcc 9.1 兼容?

最佳答案

A static_assert它的第一个参数是一个非依赖的假常量总是“格式错误,不需要诊断”,即使在从未实例化的模板中也是如此。 (所以这里 g++ 和 clang++ 都不是“不正确的”。)在你的函数模板中,T依赖于值但不依赖于类型(它的类型总是 int ),所以 decltype(T)不依赖,false_type<int>::value 也不是.

你能给我你的false_type吗?简单地也拿一个int作为参数?

#include <type_traits>
#include <iostream>

template <int>
struct false_type : public std::false_type {};

template <int T>
void function() {
static_assert(false_type<T>::value, "Error");
};

template <>
void function<1>() {
std::cout << 1 << std::endl;
}

int main() {
function<1>();
}

关于c++ - 具有非类型模板参数的函数模板中的 static_assert,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57120389/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com