2017-07-14 69 views
2

我做函数转换整数或浮弦:如果constexpr和语法错误“类型”

#include <functional> 
#include <string> 
#include <iostream> 

template <typename From> 
inline std::string ToStr(const From& src) 
{ 
    constexpr bool isIntegral = std::is_integral<From>::value; 
    constexpr bool isFloat = std::is_floating_point<From>::value; 

    if constexpr (isIntegral) 
     return (std::_Integral_to_string<char>(src)); 
    else if (isFloat) 
     return (std::_Floating_to_string("%f", src)); 
} 

int main() 
{ 
    std::cout << ToStr(123); 
} 

我使用Visual Studio 2017年,我得到以下错误:
- 语法错误“ (第一if)
- 非法否则不匹配如果在线13(第二if)

我不知道如何解决它,任何想法?

+2

第四行没有'type'。出示您的[MCVE]。 –

+0

高度相关:https://stackoverflow.com/questions/5246049/c11-static-assert-and-template-instantiation – Rakete1111

+0

@LightnessRacesinOrbit但是完全相同的代码给出了这个错误。我很困惑,因为你写的那条线上没有'type'。 – Condzi

回答

4

您正在运行15.2版本。

微软在a blog post中表示,在15.3(预览版2)中支持if constexpr

因此,请尝试升级Visual Studio。

微软很难清楚地管理他们软件的不同版本,因为他们希望每个人都“随时”升级到最新版本。可悲的是,在这种情况下,当你需要知道什么是什么时,这并不是特别实用。