使用新函数声明语法覆盖

时间:2013-09-17 22:52:57

标签: c++ c++11

鉴于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<...>;
^

你会在新语法中放置覆盖?

1 个答案:

答案 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-seqoptfinal和/或override组成。