MSVC bug: '= 0'
От: Юрий Жмеренецкий ICQ 380412032
Дата: 14.08.09 12:49
Оценка: 19 (5) :))) :))) :))) :))) :))) :))) :)
Стандарт про 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 не влияет на результат.
Re: MSVC bug: '= 0'
От: Programador  
Дата: 14.08.09 13:08
Оценка: :)))
Здравствуйте, Юрий Жмеренецкий, Вы писали:

Кто смайлик поставил, а кто и важность отметил. Андриески новые растут
Re: MSVC bug: '= 0'
От: Vamp Россия  
Дата: 14.08.09 13:14
Оценка: :)
Как использовать? Первое, что приходит в голову — компайл-тайм ассерты с экзотическоим аттенком.
Да здравствует мыло душистое и веревка пушистая.
Re[2]: MSVC bug: '= 0'
От: Юрий Жмеренецкий ICQ 380412032
Дата: 14.08.09 13:45
Оценка:
Здравствуйте, Vamp, Вы писали:

V>Как использовать?

Скорее всего никак... Теоритически может оказаться что в допустимых выражениях действуют какие-нибудь другие правила при преобразованиях, поиске имен и т.п. которые можно использовать, но это будет ms specific со всеми вытекающими последствиями. А так это просто забавный баг =)
Re: MSVC bug: '= 0'
От: IROV..  
Дата: 14.08.09 14:04
Оценка:
Здравствуйте, Юрий Жмеренецкий, Вы писали:

const int pure = 0;

class A
{
public:
    virtual void a() = pure + 0; //+
    virtual void b() = pure - pure; //+
    virtual void c() = pure; //- Интересный момент :)
};


дополню
я не волшебник, я только учусь!
Re: MSVC bug: '= 0'
От: Alexander G Украина  
Дата: 14.08.09 14:19
Оценка: 64 (3) :)
Здравствуйте, Юрий Жмеренецкий, Вы писали:



Ещё

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;
Русский военный корабль идёт ко дну!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.