如何处理“警告:在参数声明中使用‘auto’仅适用于 -fconcepts”

问题描述 投票:0回答:2

这是导致警告的代码:

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++ warnings c++-concepts
2个回答
10
投票
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();
}

0
投票

根据您的使用情况,为了避免 C++17 中的警告,您可以将函数转换为 lambda。下面的例子。

此函数会向编译器发出警告:

void show(auto... param) {
  std::printf(param...);
}

这个 lambda 不:

auto show = [] (auto... param) -> void {
  std::printf(param...);
};
© www.soinside.com 2019 - 2024. All rights reserved.