-4

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>();ましたが、これはうまくいきません。

ps

1)これは、 Returning a class from a constexpr function requires virtual keyword with g++ even through the code is the sameで私が尋ねていた質問とは異なります。

2)関数の外でクラスを定義したくありません。

4

1 に答える 1

3

実際の型は関数内でローカルであるため隠されているため、明示的に使用することはできません。ただし、次のように使用できるはずdecltypeです

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

ただし、機能する場合は、このようにする理由がわかりませんauto

于 2015-09-27T10:21:18.350 に答える