再帰的なデータ構造を操作するテンプレート関数があります。呼び出された最初の関数には、次のような形式があります。
template <unsigned Pos, typename... Ps>
auto get(param<Ps...> i) -> int
{
static_assert(Pos < sizeof...(Ps), "Error message");
return helper<Pos>(i.rest);
}
私が遊んでいる特定のケースでhelper<Pos>(i.rest)
は、データ構造の終わりを超えようとするため、コンパイルに失敗することがわかっています。
static_assert でコンパイルが停止すると予想していましたが、テンプレートがインスタンス化され、static_assert をチェックする前に失敗したようです。実際の正しい動作は何ですか?
GCC 4.7.3 を使用しています。