如何处理"警告:在参数声明中使用'auto'仅适用于 -fconcepts"

How do I handle "warning: use of ‘auto’ in parameter declaration only available with -fconcepts"

本文关键字:-fconcepts 适用于 auto 参数 处理 何处理 警告 声明      更新时间:2023-10-16

这是导致警告的代码:

inline auto getclock() { return std::chrono::steady_clock::now(); }
inline auto getelapsed(auto b, auto e) { return std::chrono::duration_cast<std::chrono::nanoseconds>(e-b).count(); }
//USAGE: auto b=getclock(); some_func_to_be_timed(...); auto duration=getelapsed(b, getclock()); ..

在我最近升级到 gcc 8 (c++17) 之前,这段代码编译没有问题,现在我收到了问题中所述的警告。为什么我现在会收到此警告,我应该如何处理它?

PS:我不在代码的其余部分(明确地)使用概念。

C++17 中的常规函数不允许auto参数。(这是在C++20)。

您可以使用常规模板,例如:

template <typename T> // or T1, T2 to mimic your code
auto getelapsed(T b, T e)
{
    return std::chrono::duration_cast<std::chrono::nanoseconds>(e-b).count();
}