请考虑以下示例.
#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++ 11.
让我们说我真的想宣布类似的东西static constexpr char value[] = "foo".
如果我使用NetBeans/TDM_MINGW,我会收到一个错误,我认为这是一个链接错误,报告对"variable_name"的未定义引用.
在MS VS 2015中尝试相同的代码我得到"表达式没有评估为常量".
一个简单的static constexpr char *解决了问题,但我失去了使用表达式的能力sizeof.
简单直接的问题(如果可能的话,直截了当的问题):
static constexpr char []内部struct/ class?static constexpr char *????static const char []的仍然是这种情况的最佳方法?static constexpr array<char,50> getConstExpr(){
return array<char,50> {"Hell"}
}.它工作正常,但我必须声明char的大小std::array:(