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/