下面的代码基于 C++17,msvc 是最新版本的( 16.8.2 ),gcc/clang 也是最新版本的,可在线运行:godblot
namespace user
{
template<typename T> const T unit { 1 };
template<typename Def>
struct data
{
typename Def::value_type val;
};
template<typename Def> const data<Def> unit<data<Def>> { Def::unit_val() };
struct decimal_def
{
using value_type = int;
static value_type unit_val() noexcept { return 10; }
};
using decimal_data = data<decimal_def>;
inline const auto decimal_data_unit = unit<decimal_data>;
}
#include <iostream>
int main()
{
std::cout << user::decimal_data_unit.val << std::endl;
}
预期输出:10
msvc 输出:0
gcc/clang 输出:10
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.