Стандарт про pure virtual function:
pure-specifier:
= 0
MSVC (15.00.30729.01) пошел дальше и проглатывает выражения (с некоторыми ограничениями):
struct A
{
virtual void f() = 6 - (2 * 3);
virtual void g() = false;
virtual void h() = true ? 0 : 1;
};
template<int a>
struct B
{
virtual void j() = a + 1;
};
struct C : A, B<-1>
{
void f(){}
void g(){}
void h(){}
void j(){}
};
int main()
{
C c;
}
// 0 error(s)
Наличие/отсутствие /Za не влияет на результат.
Здравствуйте, Юрий Жмеренецкий, Вы писали:
Кто смайлик поставил, а кто и важность отметил. Андриески новые растут
Как использовать? Первое, что приходит в голову — компайл-тайм ассерты с экзотическоим аттенком.
Здравствуйте, Юрий Жмеренецкий, Вы писали:
const int pure = 0;
class A
{
public:
virtual void a() = pure + 0; //+
virtual void b() = pure - pure; //+
virtual void c() = pure; //- Интересный момент :)
};
дополню
Здравствуйте, Юрий Жмеренецкий, Вы писали:
Ещё
template<typename T>
struct assert_is_integral_helper { virtual void f() = T(); };
template<typename T>
struct assert_is_integral : assert_is_integral_helper<T> { void f() {}};
assert_is_integral<bool> y;