トップページ > プログラム > 2014年06月26日 > ovR77aW7

書き込み順位&時間帯一覧

17 位/188 ID中時間01234567891011121314151617181920212223Total
書き込み数1000000100000000000010003



使用した名前一覧書き込んだスレッド一覧
デフォルトの名無しさん
429
【初心者歓迎】C/C++室 Ver.91【環境依存OK】

書き込みレス一覧

【初心者歓迎】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つにしなきゃダメだった。

バグレポについては考えてみます。


※このページは、『2ちゃんねる』の書き込みを基に自動生成したものです。オリジナルはリンク先の2ちゃんねるの書き込みです。
※このサイトでオリジナルの書き込みについては対応できません。
※何か問題のある場合はメールをしてください。対応します。