Проверьте, пожалуйста, будет ли это компилироваться...
От: fAX Израиль  
Дата: 05.07.04 18:05
Оценка:
Люди добрые!

Так получилось, что у меня и большинства моих знакомых — линуксы. Нужно проверить, скушает ли VS такой код:
class A{
};

class B{
  void foo(){
     &A::~A;
  }
};

int main (){
}


Если вас не затруднит, проверьте, а?
...Complex problems have simple, easy-to-understand wrong answers...
(Grossman's Misquote of H.L.Mencken)
Re: Проверьте, пожалуйста, будет ли это компилироваться...
От: _AK_ Россия  
Дата: 05.07.04 18:14
Оценка: 6 (1)
Здравствуйте, fAX, Вы писали:

fAX>Люди добрые!


fAX>Так получилось, что у меня и большинства моих знакомых — линуксы. Нужно проверить, скушает ли VS такой код:

fAX>
fAX>class A{
fAX>};

fAX>class B{
fAX>  void foo(){
fAX>     &A::~A;
fAX>  }
fAX>};

fAX>int main (){
fAX>}
fAX>


fAX>Если вас не затруднит, проверьте, а?


Не сожрала, что в принципе логично (12.4.2)
Re: Проверьте, пожалуйста, будет ли это компилироваться...
От: fAX Израиль  
Дата: 05.07.04 18:16
Оценка:
Уже проверять не нужно, нашёлся добрый человек...

Теперь интересно другое, _должно_ ли это компилироваться по стандарту?
...Complex problems have simple, easy-to-understand wrong answers...
(Grossman's Misquote of H.L.Mencken)
Re[2]: Проверьте, пожалуйста, будет ли это компилироваться..
От: _AK_ Россия  
Дата: 05.07.04 18:17
Оценка:
Здравствуйте, fAX, Вы писали:

fAX>Уже проверять не нужно, нашёлся добрый человек...


fAX>Теперь интересно другое, _должно_ ли это компилироваться по стандарту?


Нет: 12.4.2
Re: Проверьте, пожалуйста, будет ли это компилироваться...
От: Dmi3evS Россия http://dmi3s.blogspot.com/
Дата: 05.07.04 18:17
Оценка: 2 (1)
Здравствуйте, fAX, Вы писали:

fAX>Нужно проверить, скушает ли VS такой код:

fAX>
fAX>class A{
fAX>};

fAX>class B{
fAX>  void foo(){
fAX>     &A::~A; // Line 6
fAX>  }
fAX>};

fAX>int main (){
fAX>}
fAX>



VC 7.1:
main.cpp(6) : error C2277: 'A::~A' : cannot take address of this member function
main.cpp(2) : compiler has generated 'A::~A' here

PS. 7.0 и 6.0 под руками нет.
... << Rsdn@Home 1.1.4 beta 1 >>
Re[3]: Проверьте, пожалуйста, будет ли это компилироваться..
От: fAX Израиль  
Дата: 05.07.04 18:26
Оценка:
Здравствуйте, _AK_, Вы писали:

_AK>Здравствуйте, fAX, Вы писали:


fAX>>Уже проверять не нужно, нашёлся добрый человек...


fAX>>Теперь интересно другое, _должно_ ли это компилироваться по стандарту?


_AK>Нет: 12.4.2

Да, спасибо, я уже посмотрел (просто у меня печатная копия, долго искал).

Тогда другой, надеюсь, последний, вопрос. Может ли быть такое, что код не будет компилироваться если не определён пользовательский деструктор?
...Complex problems have simple, easy-to-understand wrong answers...
(Grossman's Misquote of H.L.Mencken)
Re[4]: Проверьте, пожалуйста, будет ли это компилироваться..
От: folk Россия  
Дата: 06.07.04 03:04
Оценка:
Здравствуйте, fAX, Вы писали:

fAX>Тогда другой, надеюсь, последний, вопрос. Может ли быть такое, что код не будет компилироваться если не определён пользовательский деструктор?


Если пользовательский (явно объявленный) деструктор не определен, и этот деструктор используется, то программа не скомпонуется — линкер будет ругаться.

Но похоже ты имел ввиду, возможно ли получить ошибку компиляции, закомментировав явное объявление/определение деструктора?

В голову приходит только то, что неявно объявленный деструктор может иметь
спецификацию исключений, отличную от явно объявленного. Таким образом может быть нарушено требование, что функция, переопределяющая виртуальную функцию дожна иметь не менее строгую спецификацию исключений (см. 15.4/3 и 15.4/13):
struct A
{
  virtual ~A() throw();
};

struct B
{
  ~B() throw(int);
};

struct D : public A
{
  B b;
//  ~D() throw(); // вместо требуемого ~D() throw() неявно объявлен ~D() throw(int)
};

Но во-1х из деструкторов обычно не рекомендуют выбрасывать исключения, и во-2х на практике VC игнорирует это дело, а Comeau всего лишь выдает предупреждение:
Comeau C/C++ 4.3.3 (Aug  6 2003 15:13:37) for ONLINE_EVALUATION_BETA1
Copyright 1988-2003 Comeau Computing.  All rights reserved.
MODE:strict errors C++

"ComeauTest.c", line 11: warning: exception specification for implicitly declared
          virtual function "D::~D" is incompatible with that of overridden
          function "A::~A"
  struct D : public A
         ^
In strict mode, with -tused, Compile succeeded (but remember, the Comeau online compiler does not link).
На самом деле, люди не читают газеты, они принимают их каждое утро, так же как ванну. ©Маршалл Мак-Льюэн
Re: Проверьте, пожалуйста, будет ли это компилироваться...
От: HiLoMASTER  
Дата: 06.07.04 04:34
Оценка:
Здравствуйте, fAX!
fAX>
fAX>class A{
fAX>};
fAX>class B{
fAX>  void foo(){
fAX>     &A::~A;
fAX>  }
fAX>};
fAX>int main (){
fAX>}
fAX>

fAX>Если вас не затруднит, проверьте, а?

Я не представляю как в линуксе это компильнулось
Деструктор изначально не может быть статичным (ведь при вызове метода уничтожается конкретный экземпляр класса — причем из кучи), даже если его предопределить как статичный — компилятор будет громко ругаться Это изначально неправильный подход при использовании объектно-ориентированной технологии. Для этих целей проще использовать стандартные операторы типа

int main(){
A *objA=new(A);
// ...
delete(objA);
}


А для удаления класса в целях его переопределения можно воспользоваться наследованием с перегрузкой методов.
.Da/.Net
Re[2]: Проверьте, пожалуйста, будет ли это компилироваться..
От: Vamp Россия  
Дата: 06.07.04 08:03
Оценка:
HLM> Деструктор изначально не может быть статичным
А можно узнать, причем тут статичность?
Да здравствует мыло душистое и веревка пушистая.
Re[3]: Проверьте, пожалуйста, будет ли это компилироваться..
От: Lorenzo_LAMAS  
Дата: 06.07.04 08:13
Оценка: +1
HLM>> Деструктор изначально не может быть статичным
V>А можно узнать, причем тут статичность?

И заодно я бы еще спросил, причем тут куча
Of course, the code must be complete enough to compile and link.
Re: Проверьте, пожалуйста, будет ли это компилироваться...
От: CAMAD Россия  
Дата: 06.07.04 11:31
Оценка:
Здравствуйте, fAX, Вы писали:

fAX>Люди добрые!


fAX>Так получилось, что у меня и большинства моих знакомых — линуксы. Нужно проверить, скушает ли VS такой

...
fAX>Если вас не затруднит, проверьте, а?

Сделай это сам здесь.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.