C++ 我如何处理;警告:使用‘;自动’;在参数声明中,仅可与-fconcepts“一起使用;

C++ 我如何处理;警告:使用‘;自动’;在参数声明中,仅可与-fconcepts“一起使用;,c++,warnings,c++-concepts,C++,Warnings,C++ Concepts,这是导致警告的代码: 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_time

这是导致警告的代码:

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()); ..
inline auto getclock(){return std::chrono::staddy_clock::now();}
内联自动获取经过时间(自动b,自动e){return std::chrono::duration_cast(e-b).count();}
//用法:auto b=getclock();某些功能需要定时(…);自动持续时间=GetPassed(b,getclock())。。
这段代码在我最近升级到gcc 8(c++17)之前编译没有问题,现在我得到了问题中所述的警告。 为什么我现在会收到这个警告,我应该如何处理


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

auto
作为参数,常规函数还不允许使用

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

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();
}
template//或T1、T2模拟您的代码
自动获取经过时间(TB,TE)
{
返回std::chrono::duration_cast(e-b).count();
}

编译器建议您添加
-fconcepts
作为编译器选项。试试看!你也明确地把
-std=c++17
传递给它了吗?@BasileStarynkevitch:我知道。以前不需要国旗,为什么现在?国旗的作用是什么;我没有访问C++标准文件的能力,想知道如果用实际类型明确地替换AutoCo应该是更好的解决方案吗?@ BaselestARNKEVITHY:是的,STD=C++ 17是明确传递的。这样做会有隐藏的后果吗?这只是一个警告(嗨!)我会这样做来消除这个警告。奇怪的是,在使用-std=c++14(也显式通过)时没有抱怨,现在有了。可能是一个gcc扩展和/或传入的(c++20)概念实现。我在g++7.3上使用了-std=c++17,也没有任何警告。我发现通常较新的编译器更严格地兼容,而且以前不是警告,可能是错误。最终它将成为语言的一部分,但还不是。