是否可以将std :: chrono :: duration与Rep类型一起使用为double?我尝试时在vs2012中遇到编译器错误

mik*_*keg 1 c++ compiler-errors type-conversion c++11 c++-chrono

我得到以下编译器(vs2012)错误:

错误3错误C2679:二进制'+ =':找不到运算符,它采用类型为'const std :: chrono :: duration <_Rep,_Period>'的右手操作数(或者没有可接受的转换)c:\ program files(x86)\ microsoft visual studio 11.0\vc\include\chrono 749

我对持续时间的定义是:

// Tick interval type in nanoseconds
typedef std::chrono::duration<double, std::ratio<1, 100000000>> tick_interval_type;
Run Code Online (Sandbox Code Playgroud)

当我使用float时出现相同的错误...它仅在Rep类型的持续时间为整数时编译.

有人可以帮忙吗?

编辑(从输出更完整的日志):

c:\ program files(x86)\ microsoft visual studio 11.0\vc\include\chrono(749):error C2679:binary'+ =':找不到运算符,它采用类型为'const std :: chrono的右手操作数:: duration <_Rep,_Period>'(或没有可接受的转换)[_ Red = double,_Period = std :: nano] c:\ program files(x86)\ microsoft visual studio 11.0\vc\include\chrono( 166):可能是'std :: chrono :: duration <_Rep,_Period>&std :: chrono :: duration <_Rep,_Period> :: operator + =(const std :: chrono :: duration <_Rep,_Period>& )'与[_Rep = __ int64,_ Period = std :: nano]同时尝试将参数列表'(std :: chrono :: nanoseconds,const std :: chrono :: duration <_Rep,_Period>)与[_Rep]匹配= double,_Period = std :: nano] c:\ program files(x86)\ microsoft visual studio 11.0\vc\include\thread(164):参见函数模板实例化'xtime std :: _ To_xtime(const std :: chrono :: duration <_Rep,_Period>&)'用[_Rep = double,_Period = std :: nano]编译c:\ dev\projects\revolverx\classes\ticker.h(78):见re 函数模板实例化'void std :: this_thread :: sleep_for(const std :: chrono :: duration <_Rep,_Period>&)'用[_Rep = double,_Period = std :: nano]编译

R. *_*des 6

<chrono>在Visual Studio中被破坏了.它不与混合型算术,其中,可以说,是工作的一个主要特征<chrono>.你得到这个错误,因为其中一方使用__int64nanos而另一方使用doublenanos.

我建议将其删除以支持真正的C++实现,或者使用Boost.Chrono.