c++ - 重载采用 chrono::duration 的函数

标签 c++ visual-c++ c++11 visual-studio-2012 c++-chrono

typedef std::chrono::duration<int, std::ratio_multiply<std::ratio<12, 34>, std::ratio<9>>> irrelevant;

void func(irrelevant){} //  comment this out to make it work
void func(std::chrono::seconds){}
void func(std::chrono::minutes){}

int main()
{
    func(std::chrono::seconds(43));
}

上面,包含一个采用不相关的重载会导致一堆错误,比如:

'std::ratio_divide<_R1,_R2>::type' is not a member of a base class of 'std::ratio_divide<_R1,_R2>'

真的有什么问题吗,还是应该归咎于 VS2012?我该如何解决?

最佳答案

我无法访问 VS2012,但看看这是否有效:

typedef std::chrono::duration<int, std::ratio_multiply<std::ratio<12, 34>, std::ratio<9> >::type> irrelevant;

您的代码可以在 C++11 模式下为我编译,但不能在 C++03 模式下编译 (clang/libc++)。我的理论是 VS2012 尚未实现模板别名,或者如果已经实现,它的 <chrono>尚未对模板别名的可用性使用react。作为后备,ratio_multiply有一个嵌套类型 type哪个应该完成这项工作。

关于c++ - 重载采用 chrono::duration 的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11810307/

相关文章:

c++ - 流迭代器的结尾是可配置的吗?

c++ - constexpr 函数中的复合赋值 : gcc vs. clang

dll - 从使用 stdcall 的 DLL 创建 MSVC 导入库

c++ - 如何删除 vector 中与另一个 vector 中的某些元素匹配的元素

c++ - GDI+ 对象的 std::make_unique

c++ - 如何检查套接字是否已连接

c++ - OpenCV 边界模式与模糊滤镜的问题

c++ - 具有与另一个类同名的类静态方法

c++ - 在 VC++ 2012 中初始化自动变量

c++ - 带取消引用和不带取消引用的函数有什么区别