【发布时间】:2013-07-21 04:50:18
【问题描述】:
我正在将一些 C++ 代码移植到 Windows(来自 Linux/g++4.8.1),我注意到 Microsoft 对持续时间的模运算符的实现不正确。
简单的程序
#include <chrono>
#include <iostream>
using namespace std::chrono;
int main(void)
{
std::cout << (milliseconds(1050)%seconds(1)).count() << std::endl;
return 0;
}
使用 Microsoft Visual Studio 2012 编译时出现编译错误:
error C2228: left of '.count' must have class/struct/union
标准 (http://en.cppreference.com/w/cpp/chrono/duration/operator_arith4) 定义为
template< class Rep1, class Period1, class Rep2, class Period2 >
typename common_type<duration<Rep1,Period1>, duration<Rep2,Period2>>::type
constexpr operator%( const duration<Rep1,Period1>& lhs,
const duration<Rep2,Period2>& rhs );
即模运算符返回常见类型的持续时间。 Microsoft 的实现 (http://msdn.microsoft.com/en-us/library/hh874810.aspx) 的定义为
template<class Rep1, class Period1, class Rep2, class Period2>
constexpr typename common_type<Rep1, Rep2>::type
operator%(
const duration<Rep1, Period1>& Left,
const duration<Rep2, Period2>& Right);
这会错误地返回基础持续时间存储类型。这是一个错误,还是我错过了什么?
【问题讨论】:
-
是的,这是一个错误。它也出现在 vs2013 预览版中。您应该尽快在 ms connect 提交错误报告,以便他们及时修复 vs2013。
-
好的,会的。同时,如果我只是修改我安装的 VS2012 的 chrono 标头是否安全?它只有两行更改。
标签: visual-studio-2012 c++11 chrono