How to specify type of a constexpr function return

2019-10-09 02:21发布

Basically in below I want to see if I can get around having to use auto keyword

Suppose that we have the following piece of code [works with g++ 4.9.2 (Ubuntu 4.9.2-10ubuntu13) & clang version 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;
}

How can I specify the type of v rather than using the auto keyword at its point of declaration/definition? I tried create<int>::test v = create<int>(); but this does not work.

p.s.

1)this is different from the question that I was asking at Returning a class from a constexpr function requires virtual keyword with g++ even through the code is the same

2)I do not want to define the class outside the function.

1条回答
兄弟一词,经得起流年.
2楼-- · 2019-10-09 02:48

The actual type is hidden as it's local inside the function, so you can't explicitly use it. You should however be able to use decltype as in

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

I fail to see a reason to do like this though, when auto works.

查看更多
登录 后发表回答