这是导致警告的代码:
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:我不会在代码的其余部分中(明确)使用概念。
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();
}
根据您的使用情况,为了避免 C++17 中的警告,您可以将函数转换为 lambda。下面的例子。
此函数会向编译器发出警告:
void show(auto... param) {
std::printf(param...);
}
这个 lambda 不:
auto show = [] (auto... param) -> void {
std::printf(param...);
};