delorie.com/archives/browse.cgi   search  
Mail Archives: djgpp/2001/11/28/09:20:21

From: "Randy Maddox" <rmaddox AT isicns DOT com>
To: <djgpp AT delorie DOT com>
Cc: "Randy Maddox" <rmaddox AT isicns DOT com>
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
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 <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 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
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--

- Raw text -


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