【发布时间】:2021-03-09 00:14:03
【问题描述】:
#include <iostream>
template<typename T>
const T unit{ 1 };
template<typename T>
struct data
{
typename T::value_type val;
};
struct decimal_def
{
using value_type = int;
static const value_type unit_val() {
return 10;
}
};
template<typename T>
const data<T> unit<data<T>> { T::unit_val() };
auto decimal_data_unit = unit<data<decimal_def>>;
int main(){
std::cout << decimal_data_unit.val << std::endl;
return 0;
}
输出:10
海湾合作委员会:10
msvc: 0
我认为gcc和msvc不同的原因是编译器对unit_val()的优化不同。
【问题讨论】:
-
decimal_data_unit似乎在unit<data<decimal_def>>之前初始化 -
转为
constexprDemo时没有问题... -
有趣 - 我使用 MSVC (Visual Studio 2019) 获得 10,使用 clang-cl 获得 0。看起来像静态/全局构造函数顺序的问题。我认为可能有重复...
标签: c++ templates gcc visual-c++