From: "Randy Maddox" To: Cc: "Randy Maddox" Subject: Problem with template member of template class Date: Wed, 28 Nov 2001 09:16:49 -0500 Message-ID: <000e01c17817$520a1d20$3502a8c0@nancy> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="----=_NextPart_000_000F_01C177ED.69341520" X-Priority: 3 (Normal) X-MSMail-Priority: Normal X-Mailer: Microsoft Outlook IMO, Build 9.0.2416 (9.0.2911.0) Importance: Normal X-MS-TNEF-Correlator: 000000009C48F545F726D442AB16EBB632D02A0D241A2000 X-MimeOLE: Produced By Microsoft MimeOLE V5.00.2919.6700 Reply-To: djgpp AT delorie DOT com This is a multi-part message in MIME format. ------=_NextPart_000_000F_01C177ED.69341520 Content-Type: text/plain; charset="iso-8859-1" Content-Transfer-Encoding: 7bit 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 template class Test { public: Test(const T1 & privateValue) : privateValue_(privateValue) { } template 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 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 template class Test { public: Test(const T1 & privateValue) : privateValue_(privateValue) { } template void Write(const T2 & value); private: const T1 privateValue_; }; template template void Test::Write(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 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 test2.cpp test2.cpp:25: partial specialization `Write' 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 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/collect2.exe c:/djgpp/lib/crt0.o -LC:/djgpp/bin/../lib/ gcc-lib/djgpp/3.02 -LC:/djgpp/bin/../lib/gcc-lib -Lc:/djgpp/lib -Lc:/djgpp/lib/gcc-lib/djgpp/3. 02 -Lc:/djgpp/bin -Lc:/djgpp/lib -LC:/djgpp/bin/../lib/gcc-lib/djgpp/3.02/../../.. -Lc:/djgpp/l ib/gcc-lib/djgpp/3.02/../../.. -lstdcxx -lm -lgcc -lc -lgcc -Tdjgpp-x.djl 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_000F_01C177ED.69341520 Content-Type: application/ms-tnef; name="winmail.dat" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="winmail.dat" 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 EgUAEUAuI/D8LUzfH+Ah3TfUjeOP3/v/5nHiWuhd4E8W1OZT4lfnMf/oX+af6g/VJO6h8EPsu6HV r+7/8AzbcJagY85SbBfAX9SA3ZLUgPTy9NNU7gMt/HguHACelW43IpAAcCMQb+s10YUdkSPATdIA qOB4+dXVKysRYHJwdMApwQcQ7xuhHoA0YCnQRCmRCQA0QEV5ZTcPUC04OPxBMAf8YDCxq0AgMTE5 II4o/NAXsSsBNDozEVA6cBfARRpAHoEDoFVTbkEYMAdxgiVyonD5IkC/BAAN4CkRH3EW2hSBAAIg AAALAACACCAGAAAAAADAAAAAAAAARgAAAAADhQAAAAAAAAMAAoAIIAYAAAAAAMAAAAAAAABGAAAA ABCFAAAAAAAAAwAHgAggBgAAAAAAwAAAAAAAAEYAAAAAUoUAAH1uAQAeAAmACCAGAAAAAADAAAAA AAAARgAAAABUhQAAAQAAAAQAAAA5LjAACwANgAggBgAAAAAAwAAAAAAAAEYAAAAAgoUAAAEAAAAL ABGACCAGAAAAAADAAAAAAAAARgAAAAAGhQAAAAAAAAMAEoAIIAYAAAAAAMAAAAAAAABGAAAAAAGF AAAAAAAACwAbgAggBgAAAAAAwAAAAAAAAEYAAAAADoUAAAAAAAADAByACCAGAAAAAADAAAAAAAAA RgAAAAARhQAAAAAAAAMAHoAIIAYAAAAAAMAAAAAAAABGAAAAABiFAAAAAAAAAgH4DwEAAAAQAAAA nEj1Rfcm1EKrFuu2MtAqDQIB+g8BAAAAEAAAAJxI9UX3JtRCqxbrtjLQKg0CAfsPAQAAAKMAAAAA AAAAOKG7EAXlEBqhuwgAKypWwgAAUFNUUFJYLkRMTAAAAAAAAAAATklUQfm/uAEAqgA32W4AAABD OlxEb2N1bWVudHMgYW5kIFNldHRpbmdzXFJhbmR5TS5OQVZJR0FUSU9OXExvY2FsIFNldHRpbmdz XEFwcGxpY2F0aW9uIERhdGFcTWljcm9zb2Z0XE91dGxvb2tcbWFpbGJveC5wc3QAAAMA/g8FAAAA AwANNP03AAACAX8AAQAAADEAAAAwMDAwMDAwMDlDNDhGNTQ1RjcyNkQ0NDJBQjE2RUJCNjMyRDAy QTBEMjQxQTIwMDAAAAAAAwAGEFmaVkIDAAcQkgkAAAMAEBAAAAAAAwAREAAAAAAeAAgQAQAAAGUA AABIRUxMTyxJQU1VU0lOR1RIRVdJTkRPWkUyS1ZFUlNJT05PRkRKR1BQQVNGT1VORElOVEhFWklQ QVJDSElWRURKREVWMjA0QUxQSEFXSU4yS1pJUEFOREhBVkVFTkNPVU5URVJFAAAAAHw+ ------=_NextPart_000_000F_01C177ED.69341520--