如何指定返回类的constexpr函数的类型(不依赖于auto关键字)

时间:2015-09-27 10:12:56

标签: c++ c++14 constexpr clang++ g++4.9

基本上在下面我想知道我是否可以使用auto关键字

假设我们有以下代码[适用于g ++ 4.9.2(Ubuntu 4.9.2-10ubuntu13)& clang版本3.6.0]:

//g++ -std=c++14 test.cpp
//test.cpp

#include <iostream>
using namespace std;

template<typename T>
constexpr auto create() {
  class test {
  public:
    int i;
    virtual int get(){
      return 123;
    }
  } r;
  return r;
}

auto v = create<int>();

int main(void){
  cout<<v.get()<<endl;
}

如何指定v的类型而不是使用。{ auto关键字在声明/定义点?我试过create<int>::test v = create<int>();,但这不起作用。

P.S。

1)这与我在Returning a class from a constexpr function requires virtual keyword with g++提出的问题不同,即使代码是相同的

2)我想要在函数外定义类。

1 个答案:

答案 0 :(得分:3)

实际类型是隐藏的,因为它在函数内部是本地的,因此您无法显式使用它。但是,您应该可以使用

中的decltype
decltype(create<int>()) v = create<int>();

auto有效时,我没有看到这样做的理由。