有一个返回抽象类型合法的函数头?

时间:2017-02-02 18:34:07

标签: c++ c++11 abstract-class language-lawyer

我想知道根据C ++标准,以下内容是合法的:

  var areaPath = this.focus.append("path")
        ...
        .attr('clip-path', 'url(#clip)') //defining it inline

GCC 6.3接受了它,但Clang 3.9拒绝了它。

但是,如果我改为:

struct Abstract { virtual ~Abstract() = 0; };

auto get_type() -> Abstract;

// I use `get_type` only to extract the return type.
using MyType = decltype(get_type());

现在两个编译器都接受它。在这种情况下他们都错了吗?

1 个答案:

答案 0 :(得分:10)

在[class.abstract]中,非常简单:

  

不得使用抽象类作为参数类型,作为函数返回类型,或作为显式转换的类型。

任何试图做这种事情的代码都是格式错误的。