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

How to use std::chrono::milliseconds as a default parameter

场景
我有一个 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))
}

问题
以上都可以,但是,当我用一个值调用 Fun 时,编译失败,我得到以下错误:

No viable conversion from 'bool' to 'std::chrono::milliseconds' (aka 'duration >')

问题:
我在这里做错了什么?我希望 Fun 的调用者在调用 Fun 时明确知道它正在使用 std::chrono::milliseconds。但是编译器好像不允许使用std::chrono::milliseconds作为参数?

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

环境
在 macOS High Sierra

上使用的编译器是 clang

修复了其他语法错误后,在 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));
}