如何使用 std::chrono::milliseconds 作为默认参数

Ade*_*erg 6 milliseconds c++11 c++-chrono

场景
我有一个 C++ 函数,它接收一个参数作为std::chrono::milliseconds. 它基本上是一个超时值。并且,它是默认设置为某个值的默认参数。

代码

#include <iostream>
#include <chrono>

void Fun(const std::chrono::milliseconds someTimeout = std::chrono::milliseconds(100)) {
    if (someTimeout > 0) {
        std::cout << "someNumberInMillis is: " << someNumberInMillis.count() << std::endl;
    }
}

int main() {
    unsigned int someValue = 500;
    Fun(std::chrono::milliseconds(someValue))
}
Run Code Online (Sandbox Code Playgroud)

问题
以上所有内容都可以,但是当我使用Fun值调用时,无法编译并收到以下错误:

没有从“bool”到“std::chrono::milliseconds”(又名“duration >”)的可行转换

问题:
我在这里做错了什么?我希望 的调用者在调用 时Fun明确意识到它正在使用. 但编译器似乎不允许用作参数?std::chrono::millisecondsFunstd::chrono::milliseconds

如何使用std::chrono::milliseconds作为默认参数?

在 macOS High Sierra 上使用的环境
编译器是 clang

Tob*_*ght 4

修复了其他语法错误后,在 GCC 9 中编译时不会出现警告:

#include <iostream>
#include <chrono>

void Fun(const std::chrono::milliseconds someNumberInMillis
                                         = std::chrono::milliseconds(100))
{
    if (someNumberInMillis > std::chrono::milliseconds{0}) {
        std::cout << "someNumberInMillis is: " << someNumberInMillis.count()
                  << std::endl;
    }
}

int main()
{
    unsigned int someValue = 500;
    Fun(std::chrono::milliseconds(someValue));
}
Run Code Online (Sandbox Code Playgroud)