www.delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2001/12/14/08:30:08

X-Authentication-Warning: delorie.com: mailnull set sender to djgpp-bounces using -f
From: "Randy Maddox" <rmaddox AT isicns DOT com>
To: <djgpp AT delorie DOT com>, <dj AT delorie DOT com>
Subject: RE: Problem with template member of template class
Date: Fri, 14 Dec 2001 08:25:38 -0500
Message-ID: <000301c184a2$d2415570$3502a8c0@nancy>
MIME-Version: 1.0
X-Priority: 3 (Normal)
X-MSMail-Priority: Normal
X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0)
Importance: Normal
In-Reply-To: <000e01c17817$520a1d20$3502a8c0@nancy>
X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2919.6700
X-MS-TNEF-Correlator: 000000009C48F545F726D442AB16EBB632D02A0D24322000
Reply-To: djgpp AT delorie DOT com
Errors-To: nobody AT delorie DOT com
X-Mailing-List: djgpp AT delorie DOT com
X-Unsubscribes-To: listserv AT delorie DOT com

This is a multi-part message in MIME format.

------=_NextPart_000_0004_01C18478.E96B4D70
Content-Type: text/plain;
	charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

Sorry to have taken up your time with this one.  The compiler might have
provided a more informative error message, and Stroustrup's example on page
350 of the special edition of "The C++ Programming Language" could have been
a little less confusing, but the Gnu folks were kind enough to point out the
error of my ways.  The problem was incorrect syntax.  There is no <T2> after
Write.  A careful re-reading of section 14.5.2 of the Standard agrees with
this, and the modified code compiles and runs exactly as expected.

Again, I do apologize for wasting your time.  This was a simple user-ability
problem.  :-)

Randy Maddox.

>  -----Original Message-----
> From: 	Randy Maddox [mailto:rmaddox AT isicns DOT com] 
> Sent:	Wednesday, November 28, 2001 9:17 AM
> To:	djgpp AT delorie DOT com
> Cc:	Randy Maddox
> Subject:	Problem with template member of template class
> 
> Hello,
> 
> I am using the WinDoze 2K version of DJGPP as found in the zip archive
> djdev204_alpha_win2k.zip and have encountered an issue compiling a
> template member of a template class.  This works fine only so long as the
> template member is both declared and defined in the class declarations.
> However, as soon as I try to define the template member outside of the
> class declarations I get a compile error.  For example:
> 
> - This compiles fine and works as expected:
> 
> // test driver for template class template member
> 
> #include <iostream>
> 
> template <typename T1> class Test
> {
> public:
> 
>   Test(const T1 & privateValue)
>     : privateValue_(privateValue)
>   { }
> 
>   template <typename T2>
>   void Write(const T2 & value)
>   {
>     std::cout << "Write() value is:  " << value << std::endl;
>     std::cout << "privateValue is:   " << privateValue_ << std::endl
>               << std::endl;
>   }
> 
> private:
> 
>   const T1    privateValue_;
> };
> 
> int main()
> {
>   std::cout << "Start of test driver" << std::endl << std::endl;
> 
>   Test<double>    test(3.3);
> 
>   test.Write("string value");
> 
>   test.Write(4);
> 
>   std::cout << std::endl << "End of test driver" << std::endl;
> }
> 
> // end of this file
> 
> 
> However, if I try to move the definition of Write() outside of the class
> declarations as shown here:
> 
> // test driver for template class template member
> 
> #include <iostream>
> 
> template <typename T1> class Test
> {
> public:
> 
>   Test(const T1 & privateValue)
>     : privateValue_(privateValue)
>   { }
> 
>   template <typename T2>
>   void Write(const T2 & value);
> 
> private:
> 
>   const T1    privateValue_;
> };
> 
> 
> template <typename T1>
> template <typename T2>
> void Test<T1>::Write<T2>(const T2 & value)
> {
>   std::cout << "Write() value is:  " << value << std::endl;
>   std::cout << "privateValue is:   " << privateValue_ << std::endl
>             << std::endl;
> }
> 
> 
> int main()
> {
>   std::cout << "Start of test driver" << std::endl << std::endl;
> 
>   Test<double>    test(3.3);
> 
>   test.Write("string value");
> 
>   test.Write(4);
> 
>   std::cout << std::endl << "End of test driver" << std::endl;
> }
> 
> // end of this file
> 
> 
> Then I get the following compile error:
> 
> >gxx -Wall test2.cpp
> test2.cpp:25: partial specialization `Write<T2>' of function template
> 
> Since, as far as I can tell from the Standard, this looks like the correct
> syntax why do I get this error?  Is this a bug?  An unsupported feature?
> Or do I just not actually understand the syntax?
> 
> Using gxx -v reports the following:
> 
> >gxx -v -Wall test2.cpp
> Reading specs from C:/djgpp/bin/../lib/gcc-lib/djgpp/3.02/specs
> Configured with: ../configure i586-pc-msdosdjgpp --prefix=/dev/env/DJDIR
> --disable-nls
> Thread model: single
> gcc version 3.0.2
>  C:/djgpp/bin/../lib/gcc-lib/djgpp/3.02/cc1plus.exe -v -iprefix
> C:\djgpp\bin/../lib/gcc-lib/djg
> pp/3.02/ -D__GNUC__=3 -D__GNUC_MINOR__=0 -D__GNUC_PATCHLEVEL__=2
> -D__MSDOS__ -D__GO32__ -D__uni
> x__ -D__MSDOS__ -D__GO32__ -D__unix__ -Asystem=msdos -Asystem=unix
> -D__NO_INLINE__ -D__STDC_HOS
> TED__=1 -Wall -remap -imacros
> C:/djgpp/bin/../lib/gcc-lib/djgpp/3.02/djgpp.ver -Acpu=i386 -Amac
> hine=i386 -Di386 -D__i386 -D__i386__ -D__tune_i586__ -D__tune_pentium__
> -DMSDOS -DGO32 -Dunix t
> est2.cpp -D__GNUG__=3 -D__GXX_DEPRECATED -D__EXCEPTIONS
> -D__GXX_ABI_VERSION=100 -quiet -dumpbas
> e test2.cpp -Wall -version -o c:/djgpp/tmp\ccfUr607.s
> GNU CPP version 3.0.2 (cpplib) (80386, BSD syntax)
> GNU C++ version 3.0.2 (djgpp)
>         compiled by GNU C version 3.0.2.
> ignoring nonexistent directory "C:/djgpp/djgpp/include"
> ignoring nonexistent directory "c:/djgpp/djgpp/include"
> #include "..." search starts here:
> #include <...> search starts here:
>  C:/djgpp/lang/cxx-v3
>  C:/djgpp/lang/cxx-v3/djgpp
>  C:/djgpp/lang/cxx-v3/backward
>  C:/djgpp/lib/gcc-lib/djgpp/3.02/include
>  c:/djgpp/lang/cxx-v3
>  c:/djgpp/lang/cxx-v3/djgpp
>  c:/djgpp/lang/cxx-v3/backward
>  c:/djgpp/lib/gcc-lib/djgpp/3.02/include
>  c:/djgpp/include
> End of search list.
> test2.cpp:25: partial specialization `Write<T2>' of function template
> 
> Thanks.
> 
> Randy Maddox
> C++ Author, Architect, Developer
> 703-883-8088 ext. 119 (8 am to 4:30 pm Eastern USA time)
> rmaddox AT isicns DOT com
> 

------=_NextPart_000_0004_01C18478.E96B4D70
Content-Type: application/ms-tnef;
	name="winmail.dat"
Content-Transfer-Encoding: base64
Content-Disposition: attachment;
	filename="winmail.dat"

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
N1UVEHDAn0RgIuFFSsZBB1B1bTdT/zcDMLE1QjCxOmPHhQR2MLYCRzFIWFhfREVQOFJFQzNgPOAw
s0VYwkNLYFRJT05IAkr0kEFCSV8zwFJTTKHnPSBSwCVwcXVVYHigJZD5R1BwYr3gSRUEWD1GYpbu
LW1QyMA+1XR78C5QKGDIZlVyXpA3LlwlMdH3PqBjcSibIMoALjA/seEw3Cg4XxBCQArgQjcQFmXz
7CVTgysrU/4uA8uJnHK7eOVoIGIP0FODKIwu6zXeZxSw9VMUsHDAeGhwZ+Df66Ec0A7yefAP0CI+
tz7k/cOlIlu/XM9d0lGnXq/DaioiP4Au5hBzHLByY/9vkBXRGLK+ecOYZFHG0GSvf9SGPqh3wG2Q
IiAD0BsgMz9oX2loPtRqD2sZTzBja/53DTFsHz/PH/PDpegFUaf/aV9xn2t/c19tn3VKb29wf/91
SXmr+nVnJVUg9JEE/wYP/wcfCC8JP//1C9AOAFulHEXbDQEP0E0cwDmQeCCVV1HuQe2gviC44UFn
UX/xgOC9CuBEuLEBYH7gwsU3VZBoLTg4h4Ewh6ACQHjh9KAgMTE5VWEU4AyBUbmwNDozMqBwDIBF
i73gv/ByvlBVU0G5kNs+MMt2cuvQhGJAYMDIsK/VoEmwAeC3yn3scACNYAAAAB4AQhABAAAAJwAA
ADwwMDBlMDFjMTc4MTckNTIwYTFkMjAkMzUwMmE4YzBAbmFuY3k+AAALAACACCAGAAAAAADAAAAA
AAAARgAAAAADhQAAAAAAAAMAAoAIIAYAAAAAAMAAAAAAAABGAAAAABCFAAAAAAAAAwAHgAggBgAA
AAAAwAAAAAAAAEYAAAAAUoUAAH1uAQAeAAmACCAGAAAAAADAAAAAAAAARgAAAABUhQAAAQAAAAQA
AAA5LjAACwANgAggBgAAAAAAwAAAAAAAAEYAAAAAgoUAAAEAAAALABGACCAGAAAAAADAAAAAAAAA
RgAAAAAGhQAAAAAAAAMAEoAIIAYAAAAAAMAAAAAAAABGAAAAAAGFAAAAAAAACwAbgAggBgAAAAAA
wAAAAAAAAEYAAAAADoUAAAAAAAADAByACCAGAAAAAADAAAAAAAAARgAAAAARhQAAAAAAAAMAHoAI
IAYAAAAAAMAAAAAAAABGAAAAABiFAAAAAAAAAgH4DwEAAAAQAAAAnEj1Rfcm1EKrFuu2MtAqDQIB
+g8BAAAAEAAAAJxI9UX3JtRCqxbrtjLQKg0CAfsPAQAAAKMAAAAAAAAAOKG7EAXlEBqhuwgAKypW
wgAAUFNUUFJYLkRMTAAAAAAAAAAATklUQfm/uAEAqgA32W4AAABDOlxEb2N1bWVudHMgYW5kIFNl
dHRpbmdzXFJhbmR5TS5OQVZJR0FUSU9OXExvY2FsIFNldHRpbmdzXEFwcGxpY2F0aW9uIERhdGFc
TWljcm9zb2Z0XE91dGxvb2tcbWFpbGJveC5wc3QAAAMA/g8FAAAAAwANNP03AAACAX8AAQAAADEA
AAAwMDAwMDAwMDlDNDhGNTQ1RjcyNkQ0NDJBQjE2RUJCNjMyRDAyQTBEMjQzMjIwMDAAAAAAAwAG
ECo+IdQDAAcQLQ8AAAMAEBAAAAAAAwAREAEAAAAeAAgQAQAAAGUAAABTT1JSWVRPSEFWRVRBS0VO
VVBZT1VSVElNRVdJVEhUSElTT05FVEhFQ09NUElMRVJNSUdIVEhBVkVQUk9WSURFREFNT1JFSU5G
T1JNQVRJVkVFUlJPUk1FU1NBR0UsQU5EU1RSAAAAAIsS

------=_NextPart_000_0004_01C18478.E96B4D70--

- Raw text -


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