c++ - C++ 中的模板化函数类型静态类成员
问题描述
我有以下代码,它不能与 g++ 8.3 和 clang 9.0.0 一起编译-std=c++2a
。
#include <type_traits>
template<class T>
using F = std::conditional_t<
std::is_same_v<T, int>, int,int(T)>;
template<class T>
struct A{
static F<double> f1; // OK
static F<T> f2; // variable 'f2' has function type
};
int main(){
A<double> a;
A<double>::f1(1.3);
}
如果我注释掉这一行
static F<T> f2; // variable 'f2' has function type
它将编译(带有报告未定义引用的链接错误A<double>::f1(double)
)。
以下是问题:
f1
应该编译吗?- 如果是这样,
f2
应该编译? - 如果不是,为什么在处理
f1
和处理上有这样的差异f2
?
似乎当且仅当编译器知道类型F<T>
是“预先”的函数时,它才会编译,但我不确定这是否是正确的行为。
解决方案
推荐阅读
- flutter - 从飞镖列表中删除重复项
- javascript - 如何在本机反应中切换布尔值?
- algorithm - 如何处理整数平方根方法中的大输入?
- php - laravel 获取在受保护变量中建模的请求
- typescript - 如何制作具有对象价值的枚举?
- c# - 将 REST WebService 连接到 MySQL 数据库
- c++ - 调用 'Kt::Kt(int&, int)' 没有匹配的函数
- javascript - Change document title every x seconds in JavaScript
- linux - How to protect a file under a writable directory
- ios - 无法使用 expo 从 iphone 设备获取到我的本地主机 - 反应原生