Как указать тип функции constexpr, возвращающей класс (без обращения к ключевому слову auto)

В основном ниже я хочу посмотреть, смогу ли я обойтись, используя 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>(); но это не работает.

постскриптум

1) это отличается от вопроса, который я задавал Для возврата класса из функции constexpr требуется виртуальное ключевое слово с g ++ даже через код такой же

2) я делаю не хочу определить класс вне функции.

-4

Решение

Фактический тип скрыт, поскольку он локальный внутри функции, поэтому вы не можете явно использовать его. Однако вы должны быть в состоянии использовать decltype как в

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

Я не вижу причины, чтобы сделать так, хотя, когда auto работает.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]