Compile the following testcase with /opt/intel/composer_xe_2013_sp1.3.174/bin/intel64/icpc -O0 -std=c++11 -c
struct V {
static constexpr int Size = 1;
};
template <typename To, typename From> inline To cast(From x);
template <int N, int = 1> struct sarray {
typedef sarray<N / 2> S;
sarray foo() const { const auto b = d.foo().bar(); }
sarray bar() const { return {cast<S>(d)}; }
S d;
};
template <int N> struct sarray<N, N> {
static constexpr int Size = 1;
sarray foo() const {}
sarray bar() const {}
V d;
};
template <typename To, typename From, typename... Froms>
inline To drop_arguments(Froms..., From, From);
template <typename To, typename From, typename... Froms>
inline To cast(From x, Froms... xs)
{
using R0 = typename To::S;
return {drop_arguments<R0, Froms...>(x, xs...)};
}
template <typename To, int N, typename... From>
inline To cast(const sarray<N, N> &x0, const From &... xs)
{
return cast<To>(x0.d, xs.d...);
}
template <typename To, int N, int M, typename... From>
inline To cast(const sarray<N, M> &x0, const From &... xs)
{
return cast<To>(x0.d, xs.d..., x0.d, xs.d...);
}
template <typename To, typename From, typename... Froms>
inline To drop_arguments(Froms..., From, From)
{
}
void test() { sarray<8>().foo(); }This is the output I get:
icc-ice.cpp(37): internal error: assertion failed at: "shared/cfe/edgcpfe/func_def.c", line 1576
{
^
compilation aborted for icc-ice.cpp (code 4)
PS: I tried to report this to Intel Premier Support, but once again that site is broken ... :-(