如何在模板特化期间设置C ++结构中的静态字段?

时间:2018-02-06 02:26:37

标签: c++ g++

考虑以下C ++结构type_no的代码:

#include <iostream>

template <int i>
struct type_no {
  static const int value = 0;
};

template<>
struct type_no<1> {
  static const bool value = 10;
};

template<>
struct type_no<2> {
  static const bool value = 20;
};

int main() {
  std::cout << type_no<0>::value << std::endl;
  std::cout << type_no<1>::value << std::endl;
  std::cout << type_no<2>::value << std::endl;
}

我认为运行上面的代码应该产生:

0
10
20

但是在使用g++ -std=c++14 code.cc -o code编译上述代码后,运行./code会产生:

0
1
1

操作系统为Ubuntu 16.04.2 LTS (GNU/Linux 4.14.12-x86_64-linode92 x86_64)g++ --version的结果是g++ (Ubuntu/Linaro 6.3.0-18ubuntu2~16.04) 6.3.0 20170519

1 个答案:

答案 0 :(得分:0)

标准有两个相关部分:

  

<强> 6.9.1   bool类型的值为truefalse

     

7.14布尔转换[conv.bool]
  1算术,无范围枚举,指针或指向成员类型的指针的prvalue可以转换为a   bool类型的prvalue。零值,空指针值或空成员指针值将转换为false;   任何其他值都将转换为true。对于直接初始化(11.6),类型为std::nullptr_t的prvalue可以   转换为bool类型的prvalue;结果值为false