小编Jac*_*nde的帖子

模板类型扣除失败?

请考虑以下示例.

#include <type_traits>
#include <iostream>
using namespace std;

template <typename T_> 
using Integral = typename std::enable_if<std::is_integral<T_>::value,T_>::type;
template <typename T_> 
using NotIntegral = typename std::enable_if<!std::is_integral<T_>::value, T_>::type;

template <typename T_>
void printIt(const Integral<T_> &value) { cout << "Integral == " << value << endl; }

template <typename T_>
void printIt(const NotIntegral<T_> &value) { cout << "Non Integral == " << value << endl; }

template <typename T_>
void foo(const T_ &value) { printIt<T_>(value); }

int main(int argc, char** argv)
{
    printIt<int>(66);   //Must …
Run Code Online (Sandbox Code Playgroud)

c++ templates type-traits c++11 type-deduction

7
推荐指数
1
解决办法
279
查看次数

无法声明静态constexpr char []

我已经阅读了与此问题相关的所有答案,但老实说,我不确定我是否完全理解该解决方案.我正在使用C++ 11.

让我们说我真的想宣布类似的东西static constexpr char value[] = "foo".

如果我使用NetBeans/TDM_MINGW,我会收到一个错误,我认为这是一个链接错误,报告对"variable_name"的未定义引用.

在MS VS 2015中尝试相同的代码我得到"表达式没有评估为常量".

一个简单的static constexpr char *解决了问题,但我失去了使用表达式的能力sizeof.

简单直接的问题(如果可能的话,直截了当的问题):

  1. 有没有办法申报static constexpr char []内部struct/ class
  2. 如果1)是假的,那么有一个最干净的解决方案可以解决这个问题吗?static constexpr char *????
  3. 或者旧static const char []的仍然是这种情况的最佳方法?
  4. 我已经测试了一种有效但远非"干净"的解决方案static constexpr array<char,50> getConstExpr(){ return array<char,50> {"Hell"} }.它工作正常,但我必须声明char的大小std::array:(

c++ arrays static constexpr c++11

5
推荐指数
1
解决办法
1290
查看次数