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.
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 inI fail to see a reason to do like this though, when
auto
works.