尝试编译以下程序时出现以下错误。应该修改什么才能编译?看起来像GCC 4.9.2不能实现一些noexcept移动构造函数为" = default"。
第7行造成了麻烦:TabStats::TabStats(TabStats&& other) noexcept = default;
编译错误: /resource_coordinator/tab_stats.cc:14:1:错误:函数' resource_coordinator :: TabStats :: TabStats(resource_coordinator :: TabStats&&)&#39 ;使用异常规范默认重新声明,该规范不同于隐式声明&resource_coordinator :: TabStats :: TabStats(resource_coordinator :: TabStats&&)' TabStats :: TabStats(TabStats&& other)noexcept = default;
^
消息来源:
#include "browser/resource_coordinator/tab_stats.h"
#include "build/build_config.h"
namespace resource_coordinator {
TabStats::TabStats() = default;
TabStats::TabStats(const TabStats& other) = default;
TabStats::TabStats(TabStats&& other) noexcept = default;
TabStats::~TabStats() {}
TabStats& TabStats::operator=(const TabStats& other) = default;
} // namespace resource_coordinator
tab_stats.h包含在下面:
#ifndef BROWSER_RESOURCE_COORDINATOR_TAB_STATS_H_
#define BROWSER_RESOURCE_COORDINATOR_TAB_STATS_H_
#include <stdint.h>
#include <vector>
#include "base/process/process.h"
#include "base/strings/string16.h"
#include "base/time/time.h"
#include "build/build_config.h"
namespace content {
class RenderProcessHost;
} // namespace content
namespace resource_coordinator {
struct TabStats {
TabStats();
TabStats(const TabStats& other);
TabStats(TabStats&& other) noexcept;
~TabStats();
TabStats& operator=(const TabStats& other);
bool is_app = false; // Browser window is an app.
bool is_internal_page = false; // Internal page, such as NTP or Settings.
// Playing audio, accessing cam/mic or mirroring display.
bool is_media = false;
bool is_pinned = false;
bool is_in_visible_window = false;
bool is_in_active_window = false;
// Whether this is the active tab in a browser window.
bool is_active = false;
bool is_discarded = false;
// User has entered text in a form.
bool has_form_entry = false;
int discard_count = 0;
bool has_beforeunload_handler = false;
base::TimeTicks last_active;
base::TimeTicks last_hidden;
content::RenderProcessHost* render_process_host = nullptr;
base::ProcessHandle renderer_handle = 0;
int child_process_host_id = 0;
base::string16 title;
#if defined(OS_CHROMEOS)
int oom_score = 0;
#endif
int64_t tab_contents_id = 0; // Unique ID per WebContents.
bool is_auto_discardable = true;
};
typedef std::vector<TabStats> TabStatsList;
} // namespace resource_coordinator
#endif // BROWSER_RESOURCE_COORDINATOR_TAB_STATS_H_
答案 0 :(得分:0)
我认为问题在于编译器无法生成默认的noexcept
move构造函数,因为并非所有的类成员都具有noexept
move构造函数。
例如,下一个代码将不会以相同的错误进行编译:
example :: A :: A(example :: A &&)”在默认情况下默认使用与隐式例外规范不同的例外规范
namespace example
{
class B
{
public:
B(B&&);
int mData;
};
B::B(B&&) = default;
class A
{
public:
A(A&&) noexcept;
std::string mData;
B mField;
};
A::A(A&&) noexcept = default;
}