🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: be.comp.programming
Article #5843

Re: Enkel voor C++ gurus

#5843
From: Bert Peers
Date: Thu, 06 Feb 2003 02:49
46 lines
3103 bytes
Andy Goossens wrote:
 >>  Simon>  (Test()); /* does not compile ---> why ???
 >>
 > Om een object aan te maken met een constructor die geen parameters
 > neemt, mag je volgens de C++ standaard, geen haakjes gebruiken

Tenzij het de instantiatie van een nameless temporary is op
een plaats waar de compiler geen naamloze functie declaratie
mag verwachten. Dus blijft de vraag waarom dit

(Test());

een parse error geeft...
Om het te parsen als declaratie van "een functie zonder
parameter, die een Test returned" zou het nl. naamloos
moeten mogen zijn; en daartoe moet dat hele geval bv
zelf een parameter zijn in een functie declaratie, ie
Test t (Test ()); // oeps, t == Test (*)(Test (*)())

Maw :

 > eentype eennaam( nogeentype() );
 >
 > kan namelijk op ongeveer dezelfde manier zowel aanzien worden als een
 > functiedeclaratie van een functie met de naam "eennaam", die een
 > parameter van het type "nogeentype" aanneemt, en een "eentype"
 > teruggeeft.  Ik vraag me nog steeds af waarom de compiler niet aan het
 > tweede paar haakjes kan zien dat het om een var-declaratie gaat, maar
 > euhm.. dat is dus blijkbaar niet zo.. ( ofwel is dat mss een bug in
 > gcc, ben ik ook al niet meer zeker van :) )

De haakjes helpen niet, omdat je de naam van een parameter bij
een functie declaratie mag weglaten, bv int F (int);  Om die
reden kan die nogeentype() gelezen worden als zelf weer een
declaratie van een (naamloze) functie die een nogeentype
returned en geen parameters heeft.  En die hele functie is
dan weer het argument voor de functie eennaam.

De regel is, als iets theoretisch ook maar _kan_ worden
geparsed als een functie declaratie, _wordt_ het ook een
functie declaratie (8.2.1).

De truc is er extra haakjes rondgooien; of misschien
beter, gewoon minder gecompresseerde code schrijven :)

Bert
Technical Details
Message-ID: <n0k0a.242$LG2.21161@news.chello.be>
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-03!sn-xit-01!sn-xit-08!supernews.com!news.tele.dk!news.tele.dk!small.news.tele.dk!eusc.inter.net!easynews.net!newsfeed3.easynews.net!newsfeed.freenet.de!amsnews01.chello.com!news.chello.be.POSTED!not-for-mail
References: <qO6%9.25120$Jd.2730@afrodite.telenet-ops.be> <b1o26g$bd7$1@gaudi2.rug.ac.be> <873cn4ur50.fsf@appel.kotnet.org>

Show Full Headers
Complete Article Headers
X-Google-Language: DUTCH,ASCII-7-bit
X-Google-Thread: fcea4,dbfe1cfa4ee085e1
X-Google-Attributes: gidfcea4,public
X-Google-ArrivalTime: 2003-02-05 18:47:38 PST
Path: arc1-ca.pugleaf.net!archiver1.google.com!news1.google.com!sn-xit-02!sn-xit-03!sn-xit-01!sn-xit-08!supernews.com!news.tele.dk!news.tele.dk!small.news.tele.dk!eusc.inter.net!easynews.net!newsfeed3.easynews.net!newsfeed.freenet.de!amsnews01.chello.com!news.chello.be.POSTED!not-for-mail
From: Bert Peers <piek@ab.oo>
User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.0; en-US; rv:1.1) Gecko/20020826
X-Accept-Language: en-us, en, ja
MIME-Version: 1.0
Newsgroups: be.comp.programming
Subject: Re: Enkel voor C++ gurus
References: <qO6%9.25120$Jd.2730@afrodite.telenet-ops.be> <b1o26g$bd7$1@gaudi2.rug.ac.be> <873cn4ur50.fsf@appel.kotnet.org>
Content-Type: text/plain; charset=us-ascii; format=flowed
Content-Transfer-Encoding: 7bit
Lines: 47
Message-ID: <n0k0a.242$LG2.21161@news.chello.be>
Date: Thu, 06 Feb 2003 03:49:53 +0100
NNTP-Posting-Host: 195.162.217.164
X-Complaints-To: abuse@chello.be
X-Trace: news.chello.be 1044499603 195.162.217.164 (Thu, 06 Feb 2003 03:46:43 MET)
NNTP-Posting-Date: Thu, 06 Feb 2003 03:46:43 MET
Organization: Chello Belgium Usenet Service