delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/1996/08/26/22:10:19

Xref: news2.mv.net comp.os.msdos.djgpp:7909
From: david DOT faure AT bbsrc DOT ac DOT uk (David Faure)
Newsgroups: comp.os.msdos.djgpp
Subject: Bug in lang/cxx/streambu.h
Date: 26 Aug 1996 18:38:47 GMT
Organization: BBSRC
Lines: 51
Message-ID: <4vsqvn$5nk@is.bbsrc.ac.uk>
NNTP-Posting-Host: pc0570.sri.bbsrc.ac.uk
To: djgpp AT delorie DOT com
DJ-Gateway: from newsgroup comp.os.msdos.djgpp

Hello everybody.

I found that a #include <std/typeinfo.h> is missing in lang/cxx/streambu.h.
[note to D.J. : please update if you agree with that assumption]

If you want to know why, test this code :
[about trying to know which type is a class-variable]

/* add flag -frtti when compiling */
/* and -lstdcx when linking or library "stdcx" under RHIDE*/

#include <iostream.h>
#include <std/typeinfo.h> // required according to documentation

class A {
public:
	A() {}
	virtual void foo() {cout << "called class A.foo()\n";}	
	void nonv() {cout << "non virtual called. ok.";}
	
};

class B : public A {	// so we can get A's Ctor
	void foo() { cout << "called class B.foo()\n"; }
};

int main() {
	A *AVar = new A;
	A *BVar = new B;

	// test for a vs b type
	if(typeid(B) == typeid(*BVar)) cout << "BVar is a B\n";
	if(typeid(A) == typeid(*BVar)) cout << "BVar is an A\n";
	if(typeid(B) == typeid(*AVar)) cout << "AVar is a B\n";
	if(typeid(A) == typeid(*AVar)) cout << "AVar is an A\n";

	// dynamic cast BVar to A
	A* Acast = dynamic_cast<A *>(BVar);
	if(typeid(B) == typeid(*Acast)) cout << "Acast is B\n";
	if(typeid(A) == typeid(*Acast)) cout << "Acast is A\n";
	
	// just to show they work...
	AVar->foo();
	BVar->foo(); 
	AVar->nonv();
	return 0;
}

David Faure
email : david DOT faure AT bbsrc DOT ac DOT uk until 30/08/96 (summer job)
please mail to : alain AT ctrsol1 DOT avignon DOT inra DOT fr after 30/08/96. Thanks.

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019