- 【初心者歓迎】C/C++室 Ver.91【環境依存OK】
429 :デフォルトの名無しさん[sage]:2014/06/26(木) 00:05:04.15 ID:ovR77aW7 - VS2013 c++でのfatal error C1001 の回避のしかた教えて!
template<size_t... indice> struct index_tuple{ }; template <size_t first, size_t last, typename result = index_tuple<>, bool flag = (first >= last)> struct index_range { typedef result type; }; template <size_t first, size_t last, size_t... indice> struct index_range<first, last, index_tuple<indice...>, false> : index_range<first + 1, last, index_tuple<indice..., first>> { }; template <size_t N> struct dummy { }; template <size_t N> auto test(const dummy<N>& ) ->typename index_range<1, N+1>::type { return typename index_range<1, N+1>::type{}; } ここで、 test(dummy<0>{}); とすると、 fatal error C1001: コンパイラで内部エラーが発生しました。 (コンパイラ ファイル 'msc1.cpp'、行 1325) この問題を回避するには、上記の場所付近のプログラムを単純化するか変更してください。 と出てしまいます。
| - 【初心者歓迎】C/C++室 Ver.91【環境依存OK】
432 :デフォルトの名無しさん[sage]:2014/06/26(木) 07:08:34.51 ID:ovR77aW7 - >>431
すいません。 msc1.cpp ってのはプロジェクト内を見渡しても存在しないし、全然身に覚えのないファイルなんです。 >>430 とりあえずいろいろやってみます。 上の test は1変数だけど、2変数関数にするとエラーにならなくて、もうわけわか。
| - 【初心者歓迎】C/C++室 Ver.91【環境依存OK】
436 :429[sage]:2014/06/26(木) 20:06:44.11 ID:ovR77aW7 - >>430-430
>>433-435 レスどうもありがと 抜本的な解決方法じゃないけどいろいろ弄って見つけた template <size_t N> auto test(const dummy<N>& ) ->typename index_range<1, N+1>::type { return typename index_range<1, N+1>::type{}; } に対して、意味のないデフォルト引数をくっつけて形式上2変数にしてみた。 template <size_t N, size_t D = 1> auto test(const dummy<N>& , dummy<D> = dummy<D>{}) ->typename index_range<1, N+1>::type { return typename index_range<D, N+1>::type{}; } これでC1001エラーが消えました。 関数の引数だけじゃダメでテンプレート引数も2つにしなきゃダメだった。 バグレポについては考えてみます。
|
|