How to specify type of a constexpr function returning a class (without resorting to auto keyword)

a 夏天 提交于 2019-12-13 09:56:06

问题


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:


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.



来源:https://stackoverflow.com/questions/32806835/how-to-specify-type-of-a-constexpr-function-returning-a-class-without-resorting

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!