鉴于C ++ 11中引入了新的函数声明语法,可以很容易地转换成员函数:
std::unique_ptr<...> operator()() const;
到
auto operator()() const -> std::unique_ptr<...>;
我相信要添加覆盖到第一个你会写:
std::uniqe_ptr<...> operator()() const override;
当我写:
auto operator()() const -> std::unique_ptr<...> override;
Clang给出错误:
error: type-id cannot have a name
auto operator()() const -> std::unique_ptr<...> override
^~~~~~~~
当我写:
auto operator()() const override -> std::unique_ptr<...>;
Clang给出错误:
error: 'auto' return without trailing return type
auto operator()() const override -> std::unique_ptr<...>;
^
你会在新语法中放置覆盖?
答案 0 :(得分:1)
根据语法,override
关键字应位于尾随返回类型之后,即您使用
auto operator()() -> std::unique_ptr<int> override;
尝试使用最近的gcc快照,即使是最新版本的clang也会失败。我会说这是clang实现中的一个错误。
该标准的相关引用是8.4.1 [dcl.fct.def.general]第1段:
函数定义的格式为
function-definition:
attribute-specifier-seqopt decl-specifier-seqopt declarator virt-specifier-seqopt function-body
function-body:
ctor-initializeropt compound-statement
function-try-block
= default ;
= delete ;
virt-specifier-seqopt
由final
和/或override
组成。