αλε*_*λυτ 4 c++ language-lawyer elision
考虑以下代码:
#include <iostream>
struct M {
M() { std::cout << "M\n"; }
};
template <class T>
struct Test {
Test() { std::cout << "Test\n"; }
inline static auto m = M{};
};
int main() {
Test<int> t1;
//Test t;
//(void)&t1.m;
}
Run Code Online (Sandbox Code Playgroud)
使用最新的GCC或Clang打印出唯一的“测试”。但是,如果我们使用地址的m(取消注释最后一行对象(void)&t1.m;)或转换Test类模板到常规(非模板)类则M构造函数被调用。
C++ 标准允许这种行为吗?任何报价?
| 归档时间: |
|
| 查看次数: |
56 次 |
| 最近记录: |