Эта программа генерирует ошибку:
template <int I>
void sa()
{
static_assert(0,"Hello.");
}
template <>
void sa<0>()
{
}
int main(int argc, char *argv[]) { return 0; }
Эта программа не:
template <int I>
void sa()
{
static_assert(I != 0,"Hello.");
}
template <>
void sa<0>()
{
}
int main(int argc, char *argv[]) { return 0; }
Нет никакого смысла, чтобы это имело место. Таким образом, я прихожу к выводу, что g ++ 4.5 должен быть ошибочным, если он вызывает static_assert
в неустановленном шаблоне.
И еще больше беспокоит то, что следующая программа печатает I == 1
.
#include <iostream>
using ::std::cout;
template <int I>
void sa()
{
cout << "I == " << I << '\n';
static_assert(I != 0,"Hello.");
}
template <>
void sa<0>()
{
cout << "I == " << 0 << '\n';
}
int main(int argc, char *argv[]) { sa<1>(); return 0; }
Это указывает на серьезную ошибку при обработке gcc static_assert
.
Редактировать : О, хорошо. В моей программе есть ошибка. Он должен читать I == 0
, а не I != 0
, и если это изменилось, он не может скомпилироваться так, как должен.