constexpr将无法使用Visual C ++编译器2013年11月CTP(CTP_Nov2013)

时间:2014-03-20 22:19:27

标签: visual-studio c++11 constexpr

我尝试使用constexpr实现编译时哈希算法。我下载了2013年11月的CTP,因为它支持constexpr,但这只是谎言......

#define hashCharacter(T, J)         (((T >> 0x0D) | (T << 0x13)) + J)

unsigned long constexpr GetHashCompile(const char * asSource, unsigned long asValue = 0)
{
return asSource[0] == '\0'
    ? asValue
    : GetHashCompile(asSource + 1, hashCharacter(asValue, asSource[0]));
} 

int main(int a, char ** b)
{
    const auto value = GetHashCompile("Hello from compiler");
    printf("%d", value);
}

GetHashCompile不会在编译时生成,而不是在运行时生成。我怎么能用Visual Studio来完成上面的代码?使用GCC或CLANG完全相同的代码。

1 个答案:

答案 0 :(得分:2)

实际上,2013年11月的CTP并未声称完全支持constexpr,但仅声称对constexpr提供部分支持。 features list明确表示成员函数和数组不支持constexpr。由于字符串文字是一种数组,因此它们也不受支持:

  

CTP支持C ++ 11 constexpr,但成员函数除外。 (另一个限制是不支持数组。)此外,它不支持C ++ 14的扩展constexpr规则。