-
struct {
// error C2955: “std::uniform_int_distribution”: 使用 类 模板 需要 模板 参数列表
std::uniform_int_distribution distribution;
// right
std::uniform_int_distribution<> distribution;
};
// right
auto lambda = [distribution = std::uniform_int_distribution{}] {
std::uniform_int_distribution distribution;
};
std::uniform_int_distribution distribution; // right 一个比较有意思的问题, 求解 |
Beta Was this translation helpful? Give feedback.
Replies: 3 comments 2 replies
-
clang 会给出更有意义的报错信息: error: use of class template 'uniform_int_distribution' requires template arguments; argument deduction not allowed in non-static struct member
std::uniform_int_distribution distribution;
^~~ |
Beta Was this translation helpful? Give feedback.
-
你们这样写是不打算给后面的人快点看懂了吗? template<typename T = int>
struct X{};
X x; // Error! C++17 起 OK
X<> x2; // OK 必须达到 C++17 有 但是如果在类中声明数据成员(静态或非静态,是否类内定义都无所谓),不管是否达到 C++17,都不能省略 template<typename T = int>
struct X {};
struct Test{
X x; // Error
X<> x2; // OK
static inline X x3; // Error
}; gcc13.2 有不同行为,开启 template<typename T = int>
struct X {};
struct Test{
X<> x2; // OK
static inline X x3; // OK
};
int main(){
}
|
Beta Was this translation helpful? Give feedback.
-
非静态数据成员不能进行 CTAD,而静态数据成员能。因为非静态数据成员自身不是变量,而静态数据成员是。 我提交了报告: |
Beta Was this translation helpful? Give feedback.
你们这样写是不打算给后面的人快点看懂了吗?
必须达到 C++17 有
CTAD
,才可以在全局、函数作用域声明为X
这种形式,省略<>
。但是如果在类中声明数据成员(静态或非静态,是否类内定义都无所谓),不管是否达到 C++17,都不能省略
<>
。gcc13.2 有不同行为,开启
std=c++17
,它可以通过编译,类内定义的静态数据成员省略<>
。MinGw clang 16.02
与msvc
均不可通过编译。