请考虑以下片段:
#include <utility>
template <typename U>
auto foo() -> decltype(std::declval<U>() + std::declval<U>());
template <typename T>
decltype(foo<T>()) bar(T)
{}
int main()
{
bar(1);
return 0;
}
main.cpp: In instantiation of ‘decltype (foo<T>()) bar(T) [with T = int; decltype (foo<T>()) = int]’: main.cpp:12:7: required from here main.cpp:8:2: warning: no return statement in function returning non-void [-Wreturn-type] {} ^ In file included from /usr/lib/gcc/x86_64-pc-linux-gnu/4.8.1/include/g++-v4/bits/move.h:57:0, from /usr/lib/gcc/x86_64-pc-linux-gnu/4.8.1/include/g++-v4/bits/stl_pair.h:59, from /usr/lib/gcc/x86_64-pc-linux-gnu/4.8.1/include/g++-v4/utility:70, from main.cpp:1: /usr/lib/gcc/x86_64-pc-linux-gnu/4.8.1/include/g++-v4/type_traits: In instantiation of ‘typename std::add_rvalue_reference< <template-parameter-1-1> >::type std::declval() [with _Tp = int; typename std::add_rvalue_reference< <template-parameter-1-1> >::type = int&&]’: main.cpp:8:2: required from ‘decltype (foo<T>()) bar(T) [with T = int; decltype (foo<T>()) = int]’ main.cpp:12:7: required from here /usr/lib/gcc/x86_64-pc-linux-gnu/4.8.1/include/g++-v4/type_traits:1871:7: error: static assertion failed: declval() must not be used! static_assert(__declval_protector::__stop,
如果禁用警告或为条
提供返回语句,例如,
template <typename T>
decltype(foo<T>()) bar(T a)
{
return a + a;
}
断言失败消失。Clang++3.3在任何情况下都不会触发断言错误。这种行为是否符合海湾合作委员会的标准?
我的GCC4.9版本是在6月初构建的,只要我在函数中添加return{};
或throw;
,就可以毫无怨言地编译它。如果没有返回
,它就会激发静态断言。这当然是一个bug,但只是一个次要的bug,因为函数只在执行时“崩溃”。
我在试图在常量表达式中执行declval()
时看到过这个错误,所以在您的例子中可能会发生类似的情况。“不能使用”大概是指网上解决使用或使用结果。
也许在没有任何语句的情况下,它试图用decltype
的内容制造一个语句。即使添加一个简单的语句,如0;
也可以抑制虚假错误。(但是static_assert(true,“”)
甚至void(0)
都是不够的。)
提交了一个GCC窃听器。
我有一个名为的类,它扩展了接口和。但是,当我使用该类并且不调用它的方法时,不会触发存在资源泄漏的警告。我还有一个名为的类,它有一个名为的方法,返回一个对象。当我以以下方式创建一个新的对象时,不会触发任何资源泄漏警告:
我想启用 - 从字面上看 - GCC的所有警告。(你会认为这很容易... > < li> 您可能会认为-Wall可能会成功,但事实并非如此!你仍然需要-Wextra。 你会认为可能会成功,但没有!并非此处列出的所有警告(例如-Wshadow)都由此启用。我仍然不知道这个列表是否全面。 我如何告诉GCC启用(没有if,and,or but!)它拥有的所有警告?
我使用hikaricp作为我的数据库连接池。当我完成我的SQL语句时,我将关闭连接,在连接上调用关闭,我相信您应该将连接代理返回到池。然而,我看到以下警告(不是错误)消息,我不得不怀疑这是否是一个需要解决的问题,因为我没有正确清理我的连接资源。我不是使用资源尝试,而是使用尝试捕获最后(我在最后关闭连接
我管理一切都很好,创建了一个通知服务,用于作为警报的结果触发通知。不幸的是,使用AlarmManager设置警报不能正常工作。它会在几分钟后触发(而不是几小时,这将表示时区问题)。循环周期为1周,所以我使用了常数INTERVAL_DAY,并将其乘以7。为了确保一个PendingIntent不会替换另一个,我将dayOfWeek作为第二个参数传递给PendingIntent.getService()
我在代码的不同地方使用< code>std::bind时遇到了很多问题。有时行得通,有时行不通,所以我认为我正在做一些根本错误的事情。 据我所知,的以下基本用法应该可以正常使用: 当然< code>bar_auto的类型是< code>std::function 它类似于这个bug,但是它太老了,我不认为它是相关的。 gcc的输出并不特别有启发性: 在文件中包含从bindnew.cpp: 1:0: