下面的代码基于 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
