【问题标题】:Overloading a function that takes a chrono::duration重载需要 chrono::duration 的函数
【发布时间】:2012-08-04 16:48:36
【问题描述】:
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));
}

上面,包含采用irrelevant 的重载会导致一堆错误,例如:

'std::ratio_divide<_r1>::type' 不是 'std::ratio_divide<_r1>' 基类的成员

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

【问题讨论】:

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


    【解决方案1】:

    我无法访问 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 还没有实现模板别名,或者如果有,它的&lt;chrono&gt; 还没有对模板别名的可用性做出反应。作为后备,ratio_multiply 有一个嵌套类型 type 应该可以完成这项工作。

    【讨论】:

    • "我的理论是VS2012还没有实现模板别名"这个没错。
    猜你喜欢
    • 2014-07-24
    • 2016-07-20
    • 1970-01-01
    • 2013-07-27
    • 1970-01-01
    • 2018-02-03
    • 2012-08-21
    • 2023-04-02
    • 1970-01-01
    相关资源
    最近更新 更多