* Re: emitting templates as 'T'? Changed from 3.2 to 3.3
@ 2003-05-27 20:09 Benjamin Kosnik
2003-05-28 10:54 ` templated specializations get emitted in 3.3? bert hubert
0 siblings, 1 reply; 8+ messages in thread
From: Benjamin Kosnik @ 2003-05-27 20:09 UTC (permalink / raw)
To: ahu; +Cc: gcc
This is a bit surprising, but it's kind of hard to tell what is going on.
If possible, you'll need to make a small test case that shows clearly
what is going on, instead of pointing people to a large project. Then,
you can take that 10-15 line source and enter it into bugzilla.
best,
benjamin
^ permalink raw reply [flat|nested] 8+ messages in thread
* templated specializations get emitted in 3.3?
2003-05-27 20:09 emitting templates as 'T'? Changed from 3.2 to 3.3 Benjamin Kosnik
@ 2003-05-28 10:54 ` bert hubert
2003-05-28 21:12 ` Benjamin Kosnik
0 siblings, 1 reply; 8+ messages in thread
From: bert hubert @ 2003-05-28 10:54 UTC (permalink / raw)
To: Benjamin Kosnik; +Cc: gcc
[-- Attachment #1: Type: text/plain, Size: 1053 bytes --]
On Tue, May 27, 2003 at 02:47:33PM -0500, Benjamin Kosnik wrote:
>
> This is a bit surprising, but it's kind of hard to tell what is going on.
>
> If possible, you'll need to make a small test case that shows clearly
> what is going on, instead of pointing people to a large project. Then,
> you can take that 10-15 line source and enter it into bugzilla.
Ok, I've isolated the issue, which I'm unsure is a bug at all. GCC 3.3 emits
specialized template methods as regular text symbols.
2.95 and 3.3 do not emit the specialization at all, as far as I can see.
I've attached a small tar.gz which exhibits this. The only real issue
probably is if and where this change in behaviour is documented, and if
there is a way to get the old semantics back.
If this is a bug, I'll file it in bugzilla. Please CC me on any replies as
I'm not on the list and only browse the archives every so often.
Bert
--
http://www.PowerDNS.com Open source, database driven DNS Software
http://lartc.org Linux Advanced Routing & Traffic Control HOWTO
[-- Attachment #2: gcc-issue.tar.gz --]
[-- Type: application/octet-stream, Size: 545 bytes --]
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: templated specializations get emitted in 3.3?
2003-05-28 10:54 ` templated specializations get emitted in 3.3? bert hubert
@ 2003-05-28 21:12 ` Benjamin Kosnik
2003-05-28 21:47 ` Joe Buck
0 siblings, 1 reply; 8+ messages in thread
From: Benjamin Kosnik @ 2003-05-28 21:12 UTC (permalink / raw)
To: bert hubert; +Cc: gcc
I don't think this is a bug.
What you are doing is providing a definition of a non-inlined member
specialization in a header file: this is just like putting a definition
of a non-inlined class member function in a header.
Behavior of this has definitely changed, but the current behavior seem
defensible. Note if you add "inline" you'll have consistent behavior.
-benjamin
template<class X> class Box
{
X content;
public:
Box()
{ content=0; }
int print() { return 0; }
};
template<>
//int
inline int
Box<long>::print()
{ return 1; }
// g++ head
// default : T
// inline : (no symbol)
// g++ 3.2.2
// default : (no symbol)
// inline : (no symbol)
// icc 7.1
// default : W
/*
00000000 W Box<long>::print()
00000000 d _ZN3BoxIlE5printEv$$LSDA
*/
// inline : (no symbol)
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: templated specializations get emitted in 3.3?
2003-05-28 21:12 ` Benjamin Kosnik
@ 2003-05-28 21:47 ` Joe Buck
2003-05-28 22:11 ` bert hubert
0 siblings, 1 reply; 8+ messages in thread
From: Joe Buck @ 2003-05-28 21:47 UTC (permalink / raw)
To: Benjamin Kosnik; +Cc: bert hubert, gcc
On Wed, May 28, 2003 at 03:43:27PM -0500, Benjamin Kosnik wrote:
> I don't think this is a bug.
>
> What you are doing is providing a definition of a non-inlined member
> specialization in a header file: this is just like putting a definition
> of a non-inlined class member function in a header.
If that header is included in two or more compilation units, it is a bug
in the user's program (violation of the one-definition rule).
> Behavior of this has definitely changed, but the current behavior seem
> defensible. Note if you add "inline" you'll have consistent behavior.
That seems like the right fix.
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: templated specializations get emitted in 3.3?
2003-05-28 21:47 ` Joe Buck
@ 2003-05-28 22:11 ` bert hubert
0 siblings, 0 replies; 8+ messages in thread
From: bert hubert @ 2003-05-28 22:11 UTC (permalink / raw)
To: Joe Buck; +Cc: Benjamin Kosnik, gcc
On Wed, May 28, 2003 at 02:12:09PM -0700, Joe Buck wrote:
> On Wed, May 28, 2003 at 03:43:27PM -0500, Benjamin Kosnik wrote:
> > What you are doing is providing a definition of a non-inlined member
> > specialization in a header file: this is just like putting a definition
> > of a non-inlined class member function in a header.
>
> If that header is included in two or more compilation units, it is a bug
> in the user's program (violation of the one-definition rule).
Ok, thank you both for resolving this so swiftly. I'll be sending the ISIP
authors a patch moving the specializations to inline. I hope google will be
picking up on this conversation as this is a major change of behaviour for
g++ between 3.2 and higher, which is only sparsely documented - even if it
was a misfeature before.
This behavior makes infinitely more sense.
Regards,
bert
--
http://www.PowerDNS.com Open source, database driven DNS Software
http://lartc.org Linux Advanced Routing & Traffic Control HOWTO
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: emitting templates as 'T'? Changed from 3.2 to 3.3
@ 2003-05-27 17:08 bert hubert
0 siblings, 0 replies; 8+ messages in thread
From: bert hubert @ 2003-05-27 17:08 UTC (permalink / raw)
To: drow, gcc
Apologies,
The platform is Debian Unstable on a regular Intel PC:
~$ g++ -v
Reading specs from /usr/lib/gcc-lib/i386-linux/3.3/specs
Configured with: ../src/configure -v
--enable-languages=c,c++,java,f77,pascal,objc,ada,treelang --prefix=/usr
--mandir=/usr/share/man --infodir=/usr/share/info
--with-gxx-include-dir=/usr/include/c++/3.3 --enable-shared
--with-system-zlib --enable-nls --without-included-gettext
--enable-__cxa_atexit --enable-clocale=gnu --enable-debug
--enable-java-gc=boehm --enable-java-awt=xlib --enable-objc-gc i386-linux
Thread model: posix
gcc version 3.3 (Debian)
~$ ld -v
GNU ld version 2.14.90.0.2 20030515 Debian GNU/Linux
The problem does not always exist - a regular small template example creates
W symbols.
Regards,
bert
> You've left out one important piece of information: What platform is
> this?
> On Tue, May 27, 2003 at 04:48:31PM +0200, bert hubert wrote:
>> [previously posted to bugs@gcc.gnu.org which I since realised is mostly the
>> output of bugzilla, and perhaps not the most apropriate forum for my
>> question]
--
http://www.PowerDNS.com Open source, database driven DNS Software
http://lartc.org Linux Advanced Routing & Traffic Control HOWTO
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: emitting templates as 'T'? Changed from 3.2 to 3.3
2003-05-27 15:07 bert hubert
@ 2003-05-27 15:47 ` Daniel Jacobowitz
0 siblings, 0 replies; 8+ messages in thread
From: Daniel Jacobowitz @ 2003-05-27 15:47 UTC (permalink / raw)
To: gcc
You've left out one important piece of information: What platform is
this?
On Tue, May 27, 2003 at 04:48:31PM +0200, bert hubert wrote:
> [previously posted to bugs@gcc.gnu.org which I since realised is mostly the
> output of bugzilla, and perhaps not the most apropriate forum for my
> question]
>
> Hi,
>
> I'm trying to move the ISIP production system
> http://www.isip.msstate.edu/projects/speech/software/ to g++ 3.3 and
> am encountering some problems.
>
> It appears that where g++ 3.2 did not emit a lot of template functions to
> the .o as 'T', 3.3 often does.
>
> A somewhat mangled version of the diff between the outputs of nm is below,
> lots of weak symbols suddenly becoming T. This is based on:
>
> ~/cvs/ISIP/class/math/scalar/MScalar$ g++
> -I/home/ahu/cvs/include -Wall -ftemplate-depth-50 -c -O6 -o
> mscl_02.float.float32~complex-3.3.o mscl_02.cc
> -DISIP_TEMPLATE_TARGET=float,float32 -DISIP_TEMPLATE_T0=float
> -DISIP_TEMPLATE_T1=float32 -DISIP_TEMPLATE_T2=mscl_02.float.float32
> -DISIP_TEMPLATE_float_float32 -DISIP_TEMPLATE_complex
>
> versus:
>
> ~/cvs/ISIP/class/math/scalar/MScalar$ g++-3.2
> -I/home/ahu/cvs/include -Wall -ftemplate-depth-50 -c -O6 -o
> mscl_02.float.float32~complex-3.2.o mscl_02.cc
> -DISIP_TEMPLATE_TARGET=float,float32 -DISIP_TEMPLATE_T0=float
> -DISIP_TEMPLATE_T1=float32 -DISIP_TEMPLATE_T2=mscl_02.float.float32
> -DISIP_TEMPLATE_float_float32 -DISIP_TEMPLATE_complex
>
> Any clues on how to get gcc to do the old thing? I now end up with heaps and
> heaps of duplicate symbols on linking.
>
> I tried -fno-implicit-templates, lowering -ftemplate-depth, removing -O,
> playing with -O, -fno-implicit-inline-templates all to no effect.
>
> Thanks.
>
> --- 3.2.nm 2003-05-27 14:32:13.000000000 +0200
> +++ 3.3.nm 2003-05-27 14:32:07.000000000 +0200
> @@ -20,227 +20,167 @@
> U Error::handle(SysString const&, wchar_t const*, long, char*, long, Error::EXIT, SysString const&)
> U Random::GLOBAL_UNIFORM
> U Random::GLOBAL_GAUSSIAN
> -W Random::seed(long)
> -W String::String[in-charge](wchar_t const*)
> -W String::String[in-charge](long)
> -W String::~String [in-charge]()
> -W Console::decreaseIndention()
> -W Console::increaseIndention()
> U Console::put(wchar_t const*)
> U Console::put(SysString const&)
> U Console::cons_d
> -W MScalar<double, double>::assign(MScalar<double, double> const&)
> -W bool MScalar<double, double>::assign<double>(double)
> -W MScalar<double, double>::MScalar[in-charge](MScalar<double, double> const&)
> -W MScalar<double, double>::MScalar[in-charge]()
> -W MScalar<double, double>::~MScalar [in-charge]()
> -W MScalar<float, float>::centerClip(float, float, float)
> -W MScalar<float, float>::abs(float)
> -W MScalar<float, float>::add(float, float)
> -W MScalar<float, float>::bls(float, float)
> -W MScalar<float, float>::bor(float, float)
> -W MScalar<float, float>::brs(float, float)
> -W MScalar<float, float>::cos(float)
> -W MScalar<float, float>::div(float, float)
> -W MScalar<float, float>::exp(float)
> -W MScalar<float, float>::exp()
> -W MScalar<float, float>::log(float)
> -W MScalar<float, float>::max(float, float)
> -W MScalar<float, float>::min(float, float)
> -W MScalar<float, float>::mod(float, float)
> -W MScalar<float, float>::neg(float)
> -W MScalar<float, float>::pow(float)
> -W MScalar<float, float>::pow(float, float)
> -W MScalar<float, float>::sin(float)
> -W MScalar<float, float>::sub(float, float)
> -W MScalar<float, float>::tan(float)
> -W MScalar<float, float>::acos(float)
> -W MScalar<float, float>::acos()
> -W MScalar<float, float>::asin(float)
> -W MScalar<float, float>::asin()
> -W MScalar<float, float>::atan(float)
> -W MScalar<float, float>::atan()
> -W MScalar<float, float>::band(float, float)
> -W MScalar<float, float>::bxor(float, float)
> -W float MScalar<float, float>::ceil<float>(float)
> -W MScalar<float, float>::cosh(float)
> -W MScalar<float, float>::exp2(float)
> -W MScalar<float, float>::exp2()
> -W MScalar<float, float>::log2(float)
> -W MScalar<float, float>::mult(float, float)
> +T MScalar<double, double>::bls(double, double)
> +T MScalar<double, double>::bor(double, double)
> +T MScalar<double, double>::brs(double, double)
> +T MScalar<double, double>::mod(double, double)
> +T MScalar<double, double>::band(double, double)
> +T MScalar<double, double>::bxor(double, double)
> +T MScalar<double, double>::bcmpl(double)
> +T MScalar<double, double>::fraction(double)
> +T MScalar<double, double>::operator%=(double)
> +T MScalar<float, float>::bls(float, float)
> +T MScalar<float, float>::bor(float, float)
> +T MScalar<float, float>::brs(float, float)
> +T MScalar<float, float>::mod(float, float)
> +T MScalar<float, float>::band(float, float)
> +T MScalar<float, float>::bxor(float, float)
> U MScalar<float, float>::rand(Random&)
> U MScalar<float, float>::rand(float, float, Random&)
> -W MScalar<float, float>::sign(float)
> -W MScalar<float, float>::sinh(float)
> -W MScalar<float, float>::sqrt(float)
> -W MScalar<float, float>::tanh(float)
> -W MScalar<float, float>::acosh(float)
> -W MScalar<float, float>::acosh()
> -W MScalar<float, float>::asinh(float)
> -W MScalar<float, float>::asinh()
> -W MScalar<float, float>::atanh(float)
> -W MScalar<float, float>::atanh()
> -W MScalar<float, float>::bcmpl(float)
> -W MScalar<float, float>::clear(Integral::CMODE)
> -W MScalar<float, float>::exp10(float)
> -W MScalar<float, float>::exp10()
> -W float MScalar<float, float>::floor<float>(float)
> +T MScalar<float, float>::bcmpl(float)
> U MScalar<float, float>::grand(float, float, Random&)
> -W MScalar<float, float>::limit(float, float, float)
> -W MScalar<float, float>::log10(float)
> -W MScalar<float, float>::log1p(float)
> -W MScalar<float, float>::rceil(float)
> -W float MScalar<float, float>::round<float>(float)
> -W MScalar<float, float>::assign(String const&)
> -W MScalar<float, float>::assign(MScalar<float, float> const&)
> -W bool MScalar<float, float>::assign<MScalar<double, double> >(MScalar<double, double>)
> -W bool MScalar<float, float>::assign<MScalar<unsigned char, unsigned char> >(MScalar<unsigned char, unsigned char>)
> -W bool MScalar<float, float>::assign<MScalar<long, long> >(MScalar<long, long>)
> -W bool MScalar<float, float>::assign<MScalar<unsigned long, unsigned long> >(MScalar<unsigned long, unsigned long>)
> -W bool MScalar<float, float>::assign<MScalar<short, short> >(MScalar<short, short>)
> -W bool MScalar<float, float>::assign<MScalar<unsigned short, unsigned short> >(MScalar<unsigned short, unsigned short>)
> -W bool MScalar<float, float>::assign<MScalar<long long, long long> >(MScalar<long long, long long>)
> -W bool MScalar<float, float>::assign<MScalar<unsigned long long, unsigned long long> >(MScalar<unsigned long long, unsigned long long>)
> -W bool MScalar<float, float>::assign<double>(double)
> -W bool MScalar<float, float>::assign<float>(float)
> -W bool MScalar<float, float>::assign<int>(int)
> -W bool MScalar<float, float>::assign<long>(long)
> -W MScalar<float, float>::rfloor(float)
> -W MScalar<float, float>::square(float)
> -W MScalar<float, float>::square()
> -W MScalar<float, float>::inverse(float)
> -W MScalar<float, float>::inverse()
> -W MScalar<float, float>::fraction(float)
> -W MScalar<float, float>::limitMag(float, float, float)
> +T MScalar<float, float>::fraction(float)
> U MScalar<float, float>::DEF_VALUE
> -W MScalar<float, float>::factorial(float)
> -W MScalar<float, float>::MScalar[in-charge](float)
> -W MScalar<float, float>::MScalar[in-charge]()
> -W MScalar<float, float>::~MScalar [in-charge]()
> -W MScalar<float, float>::operator/=(float)
> -W MScalar<float, float>::operator-=(float)
> -W MScalar<float, float>::operator*=(float)
> -W MScalar<float, float>::operator--(int)
> -W MScalar<float, float>::operator--()
> -W MScalar<float, float>::operator+=(float)
> -W MScalar<float, float>::operator++(int)
> -W MScalar<float, float>::operator++()
> -W MScalar<float, float>::operator%=(float)
> -W MScalar<unsigned char, unsigned char>::assign(MScalar<unsigned char, unsigned char> const&)
> -W bool MScalar<unsigned char, unsigned char>::assign<unsigned char>(unsigned char)
> -W MScalar<unsigned char, unsigned char>::MScalar[in-charge](MScalar<unsigned char, unsigned char> const&)
> -W MScalar<unsigned char, unsigned char>::MScalar[in-charge]()
> -W MScalar<unsigned char, unsigned char>::~MScalar [in-charge]()
> -W MScalar<long, long>::assign(MScalar<long, long> const&)
> -W bool MScalar<long, long>::assign<long>(long)
> -W MScalar<long, long>::MScalar[in-charge](MScalar<long, long> const&)
> -W MScalar<long, long>::MScalar[in-charge]()
> -W MScalar<long, long>::~MScalar [in-charge]()
> -W MScalar<unsigned long, unsigned long>::assign(MScalar<unsigned long, unsigned long> const&)
> -W bool MScalar<unsigned long, unsigned long>::assign<unsigned long>(unsigned long)
> -W MScalar<unsigned long, unsigned long>::MScalar[in-charge](MScalar<unsigned long, unsigned long> const&)
> -W MScalar<unsigned long, unsigned long>::MScalar[in-charge]()
> -W MScalar<unsigned long, unsigned long>::~MScalar [in-charge]()
> -W MScalar<short, short>::assign(MScalar<short, short> const&)
> -W bool MScalar<short, short>::assign<short>(short)
> -W MScalar<short, short>::MScalar[in-charge](MScalar<short, short> const&)
> -W MScalar<short, short>::MScalar[in-charge]()
> -W MScalar<short, short>::~MScalar [in-charge]()
> -W MScalar<unsigned short, unsigned short>::assign(MScalar<unsigned short, unsigned short> const&)
> -W bool MScalar<unsigned short, unsigned short>::assign<unsigned short>(unsigned short)
> -W MScalar<unsigned short, unsigned short>::MScalar[in-charge](MScalar<unsigned short, unsigned short> const&)
> -W MScalar<unsigned short, unsigned short>::MScalar[in-charge]()
> -W MScalar<unsigned short, unsigned short>::~MScalar [in-charge]()
> -W MScalar<long long, long long>::assign(MScalar<long long, long long> const&)
> -W bool MScalar<long long, long long>::assign<long long>(long long)
> -W MScalar<long long, long long>::MScalar[in-charge](MScalar<long long, long long> const&)
> -W MScalar<long long, long long>::MScalar[in-charge]()
> -W MScalar<long long, long long>::~MScalar [in-charge]()
> -W MScalar<unsigned long long, unsigned long long>::assign(MScalar<unsigned long long, unsigned long long> const&)
> -W bool MScalar<unsigned long long, unsigned long long>::assign<unsigned long long>(unsigned long long)
> -W MScalar<unsigned long long, unsigned long long>::MScalar[in-charge](MScalar<unsigned long long, unsigned long long> const&)
> -W MScalar<unsigned long long, unsigned long long>::MScalar[in-charge]()
> -W MScalar<unsigned long long, unsigned long long>::~MScalar [in-charge]()
> +T MScalar<float, float>::operator%=(float)
> +U MScalar<unsigned char, unsigned char>::CLASS_NAME
> +T MScalar<unsigned char, unsigned char>::abs(unsigned char)
> +T MScalar<unsigned char, unsigned char>::cos(unsigned char)
> +T MScalar<unsigned char, unsigned char>::neg(unsigned char)
> +T MScalar<unsigned char, unsigned char>::sin(unsigned char)
> +T MScalar<unsigned char, unsigned char>::tan(unsigned char)
> +T MScalar<unsigned char, unsigned char>::acos(unsigned char)
> +T MScalar<unsigned char, unsigned char>::asin(unsigned char)
> +T MScalar<unsigned char, unsigned char>::atan(unsigned char)
> +T MScalar<unsigned char, unsigned char>::cosh(unsigned char)
> +T MScalar<unsigned char, unsigned char>::sign(unsigned char)
> +T MScalar<unsigned char, unsigned char>::sinh(unsigned char)
> +T MScalar<unsigned char, unsigned char>::tanh(unsigned char)
> +T MScalar<unsigned char, unsigned char>::acosh(unsigned char)
> +T MScalar<unsigned char, unsigned char>::asinh(unsigned char)
> +T MScalar<unsigned char, unsigned char>::atanh(unsigned char)
> +T MScalar<unsigned char, unsigned char>::rceil(unsigned char)
> +T MScalar<unsigned char, unsigned char>::rfloor(unsigned char)
> +U MScalar<long, long>::CLASS_NAME
> +T MScalar<long, long>::cos(long)
> +T MScalar<long, long>::sin(long)
> +T MScalar<long, long>::tan(long)
> +T MScalar<long, long>::acos(long)
> +T MScalar<long, long>::asin(long)
> +T MScalar<long, long>::atan(long)
> +T MScalar<long, long>::cosh(long)
> +T MScalar<long, long>::sinh(long)
> +T MScalar<long, long>::tanh(long)
> +T MScalar<long, long>::acosh(long)
> +T MScalar<long, long>::asinh(long)
> +T MScalar<long, long>::atanh(long)
> +T MScalar<long, long>::rceil(long)
> +T MScalar<long, long>::rfloor(long)
> +U MScalar<unsigned long, unsigned long>::CLASS_NAME
> +T MScalar<unsigned long, unsigned long>::abs(unsigned long)
> +T MScalar<unsigned long, unsigned long>::cos(unsigned long)
> +T MScalar<unsigned long, unsigned long>::neg(unsigned long)
> +T MScalar<unsigned long, unsigned long>::sin(unsigned long)
> +T MScalar<unsigned long, unsigned long>::tan(unsigned long)
> +T MScalar<unsigned long, unsigned long>::acos(unsigned long)
> +T MScalar<unsigned long, unsigned long>::asin(unsigned long)
> +T MScalar<unsigned long, unsigned long>::atan(unsigned long)
> +T MScalar<unsigned long, unsigned long>::cosh(unsigned long)
> +T MScalar<unsigned long, unsigned long>::sign(unsigned long)
> +T MScalar<unsigned long, unsigned long>::sinh(unsigned long)
> +T MScalar<unsigned long, unsigned long>::tanh(unsigned long)
> +T MScalar<unsigned long, unsigned long>::acosh(unsigned long)
> +T MScalar<unsigned long, unsigned long>::asinh(unsigned long)
> +T MScalar<unsigned long, unsigned long>::atanh(unsigned long)
> +T MScalar<unsigned long, unsigned long>::rceil(unsigned long)
> +T MScalar<unsigned long, unsigned long>::rfloor(unsigned long)
> +U MScalar<short, short>::CLASS_NAME
> +T MScalar<short, short>::cos(short)
> +T MScalar<short, short>::sin(short)
> +T MScalar<short, short>::tan(short)
> +T MScalar<short, short>::acos(short)
> +T MScalar<short, short>::asin(short)
> +T MScalar<short, short>::atan(short)
> +T MScalar<short, short>::cosh(short)
> +T MScalar<short, short>::sinh(short)
> +T MScalar<short, short>::tanh(short)
> +T MScalar<short, short>::acosh(short)
> +T MScalar<short, short>::asinh(short)
> +T MScalar<short, short>::atanh(short)
> +T MScalar<short, short>::rceil(short)
> +T MScalar<short, short>::rfloor(short)
> +U MScalar<unsigned short, unsigned short>::CLASS_NAME
> +T MScalar<unsigned short, unsigned short>::abs(unsigned short)
> +T MScalar<unsigned short, unsigned short>::cos(unsigned short)
> +T MScalar<unsigned short, unsigned short>::neg(unsigned short)
> +T MScalar<unsigned short, unsigned short>::sin(unsigned short)
> +T MScalar<unsigned short, unsigned short>::tan(unsigned short)
> +T MScalar<unsigned short, unsigned short>::acos(unsigned short)
> +T MScalar<unsigned short, unsigned short>::asin(unsigned short)
> +T MScalar<unsigned short, unsigned short>::atan(unsigned short)
> +T MScalar<unsigned short, unsigned short>::cosh(unsigned short)
> +T MScalar<unsigned short, unsigned short>::sign(unsigned short)
> +T MScalar<unsigned short, unsigned short>::sinh(unsigned short)
> +T MScalar<unsigned short, unsigned short>::tanh(unsigned short)
> +T MScalar<unsigned short, unsigned short>::acosh(unsigned short)
> +T MScalar<unsigned short, unsigned short>::asinh(unsigned short)
> +T MScalar<unsigned short, unsigned short>::atanh(unsigned short)
> +T MScalar<unsigned short, unsigned short>::rceil(unsigned short)
> +T MScalar<unsigned short, unsigned short>::rfloor(unsigned short)
> +U MScalar<long long, long long>::CLASS_NAME
> +T MScalar<long long, long long>::cos(long long)
> +T MScalar<long long, long long>::sin(long long)
> +T MScalar<long long, long long>::tan(long long)
> +T MScalar<long long, long long>::acos(long long)
> +T MScalar<long long, long long>::asin(long long)
> +T MScalar<long long, long long>::atan(long long)
> +T MScalar<long long, long long>::cosh(long long)
> +T MScalar<long long, long long>::sinh(long long)
> +T MScalar<long long, long long>::tanh(long long)
> +T MScalar<long long, long long>::acosh(long long)
> +T MScalar<long long, long long>::asinh(long long)
> +T MScalar<long long, long long>::atanh(long long)
> +T MScalar<long long, long long>::rceil(long long)
> +T MScalar<long long, long long>::rfloor(long long)
> +U MScalar<unsigned long long, unsigned long long>::CLASS_NAME
> +T MScalar<unsigned long long, unsigned long long>::abs(unsigned long long)
> +T MScalar<unsigned long long, unsigned long long>::cos(unsigned long long)
> +T MScalar<unsigned long long, unsigned long long>::neg(unsigned long long)
> +T MScalar<unsigned long long, unsigned long long>::sin(unsigned long long)
> +T MScalar<unsigned long long, unsigned long long>::tan(unsigned long long)
> +T MScalar<unsigned long long, unsigned long long>::acos(unsigned long long)
> +T MScalar<unsigned long long, unsigned long long>::asin(unsigned long long)
> +T MScalar<unsigned long long, unsigned long long>::atan(unsigned long long)
> +T MScalar<unsigned long long, unsigned long long>::cosh(unsigned long long)
> +T MScalar<unsigned long long, unsigned long long>::sign(unsigned long long)
> +T MScalar<unsigned long long, unsigned long long>::sinh(unsigned long long)
> +T MScalar<unsigned long long, unsigned long long>::tanh(unsigned long long)
> +T MScalar<unsigned long long, unsigned long long>::acosh(unsigned long long)
> +T MScalar<unsigned long long, unsigned long long>::asinh(unsigned long long)
> +T MScalar<unsigned long long, unsigned long long>::atanh(unsigned long long)
> +T MScalar<unsigned long long, unsigned long long>::rceil(unsigned long long)
> +T MScalar<unsigned long long, unsigned long long>::rfloor(unsigned long long)
> U Integral::almostEqual(double, double, double, double)
> -W Integral::almostEqual(float, float, double, double)
> -W Integral::cos(double)
> -W Integral::exp(double)
> -W Integral::log(double)
> -W Integral::max(double, double)
> -W Integral::min(double, double)
> -W Integral::pow(double, double)
> -W Integral::sin(double)
> -W Integral::tan(double)
> -W Integral::acos(double)
> -W Integral::asin(double)
> -W Integral::atan(double)
> -W Integral::ceil(double)
> -W Integral::cosh(double)
> -W Integral::exp2(double)
> -W Integral::hash(float, unsigned long)
> -W Integral::log2(double)
> -W Integral::sinh(double)
> -W Integral::sqrt(double)
> -W Integral::tanh(double)
> -W Integral::acosh(double)
> -W Integral::asinh(double)
> -W Integral::atanh(double)
> -W Integral::exp10(double)
> -W Integral::floor(double)
> -W Integral::log10(double)
> -W Integral::log1p(double)
> -W Integral::round(double)
> -W Integral::hash_32(unsigned long, unsigned long)
> -W Integral::fraction(double)
> U SysString::setCapacity(long)
> U SysString::assign(wchar_t const*)
> U SysString::assign(double)
> U SysString::assign(float)
> -W SysString::concat(wchar_t const*)
> U SysString::concat(SysString const&)
> -W SysString::concat(double)
> U SysString::freeMem()
> U SysString::SysString[in-charge](wchar_t const*)
> U SysString::SysString[in-charge](long)
> U SysString::SysString[not-in-charge](long)
> -W SysString::~SysString [in-charge]()
> -W SysString::~SysString [not-in-charge]()
> -W MScalar<double, double>::operator double() const
> -W MScalar<float, float>::almostEqual(float) const
> -W MScalar<float, float>::presentValue(double) const
> -W MScalar<float, float>::eq(MScalar<float, float> const&) const
> -W MScalar<float, float>::eq(float) const
> -W MScalar<float, float>::eq(float, float) const
> -W MScalar<float, float>::ge(float) const
> -W MScalar<float, float>::gt(float) const
> -W MScalar<float, float>::le(float) const
> -W MScalar<float, float>::lt(float) const
> -W MScalar<float, float>::ne(float) const
> -W MScalar<float, float>::get(String&) const
> -W MScalar<float, float>::hash(unsigned long) const
> +T MScalar<SysComplex<double>, double>::presentValue(SysComplex<double>) const
> +T MScalar<SysComplex<float>, float>::presentValue(SysComplex<double>) const
> +T MScalar<SysComplex<long>, long>::presentValue(SysComplex<double>) const
> +T MScalar<double, double>::presentValue(double) const
> +T MScalar<double, double>::operator%(double) const
> +T MScalar<float, float>::presentValue(double) const
> U MScalar<float, float>::debug(wchar_t const*) const
> -W MScalar<float, float>::operator float() const
> -W MScalar<float, float>::operator/(float) const
> -W MScalar<float, float>::operator==(float) const
> -W MScalar<float, float>::operator>=(float) const
> -W MScalar<float, float>::operator>(float) const
> -W MScalar<float, float>::operator<=(float) const
> -W MScalar<float, float>::operator<(float) const
> -W MScalar<float, float>::operator-(float) const
> -W MScalar<float, float>::operator*(float) const
> -W MScalar<float, float>::operator!=(float) const
> -W MScalar<float, float>::operator+(float) const
> -W MScalar<float, float>::operator%(float) const
> -W MScalar<unsigned char, unsigned char>::operator unsigned char() const
> -W MScalar<long, long>::operator long() const
> -W MScalar<unsigned long, unsigned long>::operator unsigned long() const
> -W MScalar<short, short>::operator short() const
> -W MScalar<unsigned short, unsigned short>::operator unsigned short() const
> -W MScalar<long long, long long>::operator long long() const
> -W MScalar<unsigned long long, unsigned long long>::operator unsigned long long() const
> +T MScalar<float, float>::operator%(float) const
> U SysString::get(float&) const
> -W std::type_info::operator==(std::type_info const&) const
> -W std::type_info::operator!=(std::type_info const&) const
> U typeinfo for double
> U typeinfo for float
> U typeinfo for unsigned char
> @@ -254,18 +194,14 @@
> U __gxx_personality_v0
> U acos
> U asin
> -U atan
> -U ceil
> U cos
> U cosh
> U exp
> -U floor
> U log
> U log10
> U modf
> U pow
> U sin
> U sinh
> -U sqrt
> U tan
> U tanh
>
>
>
>
>
> --
> http://www.PowerDNS.com Open source, database driven DNS Software
> http://lartc.org Linux Advanced Routing & Traffic Control HOWTO
>
--
Daniel Jacobowitz
MontaVista Software Debian GNU/Linux Developer
^ permalink raw reply [flat|nested] 8+ messages in thread
* emitting templates as 'T'? Changed from 3.2 to 3.3
@ 2003-05-27 15:07 bert hubert
2003-05-27 15:47 ` Daniel Jacobowitz
0 siblings, 1 reply; 8+ messages in thread
From: bert hubert @ 2003-05-27 15:07 UTC (permalink / raw)
To: gcc
[previously posted to bugs@gcc.gnu.org which I since realised is mostly the
output of bugzilla, and perhaps not the most apropriate forum for my
question]
Hi,
I'm trying to move the ISIP production system
http://www.isip.msstate.edu/projects/speech/software/ to g++ 3.3 and
am encountering some problems.
It appears that where g++ 3.2 did not emit a lot of template functions to
the .o as 'T', 3.3 often does.
A somewhat mangled version of the diff between the outputs of nm is below,
lots of weak symbols suddenly becoming T. This is based on:
~/cvs/ISIP/class/math/scalar/MScalar$ g++
-I/home/ahu/cvs/include -Wall -ftemplate-depth-50 -c -O6 -o
mscl_02.float.float32~complex-3.3.o mscl_02.cc
-DISIP_TEMPLATE_TARGET=float,float32 -DISIP_TEMPLATE_T0=float
-DISIP_TEMPLATE_T1=float32 -DISIP_TEMPLATE_T2=mscl_02.float.float32
-DISIP_TEMPLATE_float_float32 -DISIP_TEMPLATE_complex
versus:
~/cvs/ISIP/class/math/scalar/MScalar$ g++-3.2
-I/home/ahu/cvs/include -Wall -ftemplate-depth-50 -c -O6 -o
mscl_02.float.float32~complex-3.2.o mscl_02.cc
-DISIP_TEMPLATE_TARGET=float,float32 -DISIP_TEMPLATE_T0=float
-DISIP_TEMPLATE_T1=float32 -DISIP_TEMPLATE_T2=mscl_02.float.float32
-DISIP_TEMPLATE_float_float32 -DISIP_TEMPLATE_complex
Any clues on how to get gcc to do the old thing? I now end up with heaps and
heaps of duplicate symbols on linking.
I tried -fno-implicit-templates, lowering -ftemplate-depth, removing -O,
playing with -O, -fno-implicit-inline-templates all to no effect.
Thanks.
--- 3.2.nm 2003-05-27 14:32:13.000000000 +0200
+++ 3.3.nm 2003-05-27 14:32:07.000000000 +0200
@@ -20,227 +20,167 @@
U Error::handle(SysString const&, wchar_t const*, long, char*, long, Error::EXIT, SysString const&)
U Random::GLOBAL_UNIFORM
U Random::GLOBAL_GAUSSIAN
-W Random::seed(long)
-W String::String[in-charge](wchar_t const*)
-W String::String[in-charge](long)
-W String::~String [in-charge]()
-W Console::decreaseIndention()
-W Console::increaseIndention()
U Console::put(wchar_t const*)
U Console::put(SysString const&)
U Console::cons_d
-W MScalar<double, double>::assign(MScalar<double, double> const&)
-W bool MScalar<double, double>::assign<double>(double)
-W MScalar<double, double>::MScalar[in-charge](MScalar<double, double> const&)
-W MScalar<double, double>::MScalar[in-charge]()
-W MScalar<double, double>::~MScalar [in-charge]()
-W MScalar<float, float>::centerClip(float, float, float)
-W MScalar<float, float>::abs(float)
-W MScalar<float, float>::add(float, float)
-W MScalar<float, float>::bls(float, float)
-W MScalar<float, float>::bor(float, float)
-W MScalar<float, float>::brs(float, float)
-W MScalar<float, float>::cos(float)
-W MScalar<float, float>::div(float, float)
-W MScalar<float, float>::exp(float)
-W MScalar<float, float>::exp()
-W MScalar<float, float>::log(float)
-W MScalar<float, float>::max(float, float)
-W MScalar<float, float>::min(float, float)
-W MScalar<float, float>::mod(float, float)
-W MScalar<float, float>::neg(float)
-W MScalar<float, float>::pow(float)
-W MScalar<float, float>::pow(float, float)
-W MScalar<float, float>::sin(float)
-W MScalar<float, float>::sub(float, float)
-W MScalar<float, float>::tan(float)
-W MScalar<float, float>::acos(float)
-W MScalar<float, float>::acos()
-W MScalar<float, float>::asin(float)
-W MScalar<float, float>::asin()
-W MScalar<float, float>::atan(float)
-W MScalar<float, float>::atan()
-W MScalar<float, float>::band(float, float)
-W MScalar<float, float>::bxor(float, float)
-W float MScalar<float, float>::ceil<float>(float)
-W MScalar<float, float>::cosh(float)
-W MScalar<float, float>::exp2(float)
-W MScalar<float, float>::exp2()
-W MScalar<float, float>::log2(float)
-W MScalar<float, float>::mult(float, float)
+T MScalar<double, double>::bls(double, double)
+T MScalar<double, double>::bor(double, double)
+T MScalar<double, double>::brs(double, double)
+T MScalar<double, double>::mod(double, double)
+T MScalar<double, double>::band(double, double)
+T MScalar<double, double>::bxor(double, double)
+T MScalar<double, double>::bcmpl(double)
+T MScalar<double, double>::fraction(double)
+T MScalar<double, double>::operator%=(double)
+T MScalar<float, float>::bls(float, float)
+T MScalar<float, float>::bor(float, float)
+T MScalar<float, float>::brs(float, float)
+T MScalar<float, float>::mod(float, float)
+T MScalar<float, float>::band(float, float)
+T MScalar<float, float>::bxor(float, float)
U MScalar<float, float>::rand(Random&)
U MScalar<float, float>::rand(float, float, Random&)
-W MScalar<float, float>::sign(float)
-W MScalar<float, float>::sinh(float)
-W MScalar<float, float>::sqrt(float)
-W MScalar<float, float>::tanh(float)
-W MScalar<float, float>::acosh(float)
-W MScalar<float, float>::acosh()
-W MScalar<float, float>::asinh(float)
-W MScalar<float, float>::asinh()
-W MScalar<float, float>::atanh(float)
-W MScalar<float, float>::atanh()
-W MScalar<float, float>::bcmpl(float)
-W MScalar<float, float>::clear(Integral::CMODE)
-W MScalar<float, float>::exp10(float)
-W MScalar<float, float>::exp10()
-W float MScalar<float, float>::floor<float>(float)
+T MScalar<float, float>::bcmpl(float)
U MScalar<float, float>::grand(float, float, Random&)
-W MScalar<float, float>::limit(float, float, float)
-W MScalar<float, float>::log10(float)
-W MScalar<float, float>::log1p(float)
-W MScalar<float, float>::rceil(float)
-W float MScalar<float, float>::round<float>(float)
-W MScalar<float, float>::assign(String const&)
-W MScalar<float, float>::assign(MScalar<float, float> const&)
-W bool MScalar<float, float>::assign<MScalar<double, double> >(MScalar<double, double>)
-W bool MScalar<float, float>::assign<MScalar<unsigned char, unsigned char> >(MScalar<unsigned char, unsigned char>)
-W bool MScalar<float, float>::assign<MScalar<long, long> >(MScalar<long, long>)
-W bool MScalar<float, float>::assign<MScalar<unsigned long, unsigned long> >(MScalar<unsigned long, unsigned long>)
-W bool MScalar<float, float>::assign<MScalar<short, short> >(MScalar<short, short>)
-W bool MScalar<float, float>::assign<MScalar<unsigned short, unsigned short> >(MScalar<unsigned short, unsigned short>)
-W bool MScalar<float, float>::assign<MScalar<long long, long long> >(MScalar<long long, long long>)
-W bool MScalar<float, float>::assign<MScalar<unsigned long long, unsigned long long> >(MScalar<unsigned long long, unsigned long long>)
-W bool MScalar<float, float>::assign<double>(double)
-W bool MScalar<float, float>::assign<float>(float)
-W bool MScalar<float, float>::assign<int>(int)
-W bool MScalar<float, float>::assign<long>(long)
-W MScalar<float, float>::rfloor(float)
-W MScalar<float, float>::square(float)
-W MScalar<float, float>::square()
-W MScalar<float, float>::inverse(float)
-W MScalar<float, float>::inverse()
-W MScalar<float, float>::fraction(float)
-W MScalar<float, float>::limitMag(float, float, float)
+T MScalar<float, float>::fraction(float)
U MScalar<float, float>::DEF_VALUE
-W MScalar<float, float>::factorial(float)
-W MScalar<float, float>::MScalar[in-charge](float)
-W MScalar<float, float>::MScalar[in-charge]()
-W MScalar<float, float>::~MScalar [in-charge]()
-W MScalar<float, float>::operator/=(float)
-W MScalar<float, float>::operator-=(float)
-W MScalar<float, float>::operator*=(float)
-W MScalar<float, float>::operator--(int)
-W MScalar<float, float>::operator--()
-W MScalar<float, float>::operator+=(float)
-W MScalar<float, float>::operator++(int)
-W MScalar<float, float>::operator++()
-W MScalar<float, float>::operator%=(float)
-W MScalar<unsigned char, unsigned char>::assign(MScalar<unsigned char, unsigned char> const&)
-W bool MScalar<unsigned char, unsigned char>::assign<unsigned char>(unsigned char)
-W MScalar<unsigned char, unsigned char>::MScalar[in-charge](MScalar<unsigned char, unsigned char> const&)
-W MScalar<unsigned char, unsigned char>::MScalar[in-charge]()
-W MScalar<unsigned char, unsigned char>::~MScalar [in-charge]()
-W MScalar<long, long>::assign(MScalar<long, long> const&)
-W bool MScalar<long, long>::assign<long>(long)
-W MScalar<long, long>::MScalar[in-charge](MScalar<long, long> const&)
-W MScalar<long, long>::MScalar[in-charge]()
-W MScalar<long, long>::~MScalar [in-charge]()
-W MScalar<unsigned long, unsigned long>::assign(MScalar<unsigned long, unsigned long> const&)
-W bool MScalar<unsigned long, unsigned long>::assign<unsigned long>(unsigned long)
-W MScalar<unsigned long, unsigned long>::MScalar[in-charge](MScalar<unsigned long, unsigned long> const&)
-W MScalar<unsigned long, unsigned long>::MScalar[in-charge]()
-W MScalar<unsigned long, unsigned long>::~MScalar [in-charge]()
-W MScalar<short, short>::assign(MScalar<short, short> const&)
-W bool MScalar<short, short>::assign<short>(short)
-W MScalar<short, short>::MScalar[in-charge](MScalar<short, short> const&)
-W MScalar<short, short>::MScalar[in-charge]()
-W MScalar<short, short>::~MScalar [in-charge]()
-W MScalar<unsigned short, unsigned short>::assign(MScalar<unsigned short, unsigned short> const&)
-W bool MScalar<unsigned short, unsigned short>::assign<unsigned short>(unsigned short)
-W MScalar<unsigned short, unsigned short>::MScalar[in-charge](MScalar<unsigned short, unsigned short> const&)
-W MScalar<unsigned short, unsigned short>::MScalar[in-charge]()
-W MScalar<unsigned short, unsigned short>::~MScalar [in-charge]()
-W MScalar<long long, long long>::assign(MScalar<long long, long long> const&)
-W bool MScalar<long long, long long>::assign<long long>(long long)
-W MScalar<long long, long long>::MScalar[in-charge](MScalar<long long, long long> const&)
-W MScalar<long long, long long>::MScalar[in-charge]()
-W MScalar<long long, long long>::~MScalar [in-charge]()
-W MScalar<unsigned long long, unsigned long long>::assign(MScalar<unsigned long long, unsigned long long> const&)
-W bool MScalar<unsigned long long, unsigned long long>::assign<unsigned long long>(unsigned long long)
-W MScalar<unsigned long long, unsigned long long>::MScalar[in-charge](MScalar<unsigned long long, unsigned long long> const&)
-W MScalar<unsigned long long, unsigned long long>::MScalar[in-charge]()
-W MScalar<unsigned long long, unsigned long long>::~MScalar [in-charge]()
+T MScalar<float, float>::operator%=(float)
+U MScalar<unsigned char, unsigned char>::CLASS_NAME
+T MScalar<unsigned char, unsigned char>::abs(unsigned char)
+T MScalar<unsigned char, unsigned char>::cos(unsigned char)
+T MScalar<unsigned char, unsigned char>::neg(unsigned char)
+T MScalar<unsigned char, unsigned char>::sin(unsigned char)
+T MScalar<unsigned char, unsigned char>::tan(unsigned char)
+T MScalar<unsigned char, unsigned char>::acos(unsigned char)
+T MScalar<unsigned char, unsigned char>::asin(unsigned char)
+T MScalar<unsigned char, unsigned char>::atan(unsigned char)
+T MScalar<unsigned char, unsigned char>::cosh(unsigned char)
+T MScalar<unsigned char, unsigned char>::sign(unsigned char)
+T MScalar<unsigned char, unsigned char>::sinh(unsigned char)
+T MScalar<unsigned char, unsigned char>::tanh(unsigned char)
+T MScalar<unsigned char, unsigned char>::acosh(unsigned char)
+T MScalar<unsigned char, unsigned char>::asinh(unsigned char)
+T MScalar<unsigned char, unsigned char>::atanh(unsigned char)
+T MScalar<unsigned char, unsigned char>::rceil(unsigned char)
+T MScalar<unsigned char, unsigned char>::rfloor(unsigned char)
+U MScalar<long, long>::CLASS_NAME
+T MScalar<long, long>::cos(long)
+T MScalar<long, long>::sin(long)
+T MScalar<long, long>::tan(long)
+T MScalar<long, long>::acos(long)
+T MScalar<long, long>::asin(long)
+T MScalar<long, long>::atan(long)
+T MScalar<long, long>::cosh(long)
+T MScalar<long, long>::sinh(long)
+T MScalar<long, long>::tanh(long)
+T MScalar<long, long>::acosh(long)
+T MScalar<long, long>::asinh(long)
+T MScalar<long, long>::atanh(long)
+T MScalar<long, long>::rceil(long)
+T MScalar<long, long>::rfloor(long)
+U MScalar<unsigned long, unsigned long>::CLASS_NAME
+T MScalar<unsigned long, unsigned long>::abs(unsigned long)
+T MScalar<unsigned long, unsigned long>::cos(unsigned long)
+T MScalar<unsigned long, unsigned long>::neg(unsigned long)
+T MScalar<unsigned long, unsigned long>::sin(unsigned long)
+T MScalar<unsigned long, unsigned long>::tan(unsigned long)
+T MScalar<unsigned long, unsigned long>::acos(unsigned long)
+T MScalar<unsigned long, unsigned long>::asin(unsigned long)
+T MScalar<unsigned long, unsigned long>::atan(unsigned long)
+T MScalar<unsigned long, unsigned long>::cosh(unsigned long)
+T MScalar<unsigned long, unsigned long>::sign(unsigned long)
+T MScalar<unsigned long, unsigned long>::sinh(unsigned long)
+T MScalar<unsigned long, unsigned long>::tanh(unsigned long)
+T MScalar<unsigned long, unsigned long>::acosh(unsigned long)
+T MScalar<unsigned long, unsigned long>::asinh(unsigned long)
+T MScalar<unsigned long, unsigned long>::atanh(unsigned long)
+T MScalar<unsigned long, unsigned long>::rceil(unsigned long)
+T MScalar<unsigned long, unsigned long>::rfloor(unsigned long)
+U MScalar<short, short>::CLASS_NAME
+T MScalar<short, short>::cos(short)
+T MScalar<short, short>::sin(short)
+T MScalar<short, short>::tan(short)
+T MScalar<short, short>::acos(short)
+T MScalar<short, short>::asin(short)
+T MScalar<short, short>::atan(short)
+T MScalar<short, short>::cosh(short)
+T MScalar<short, short>::sinh(short)
+T MScalar<short, short>::tanh(short)
+T MScalar<short, short>::acosh(short)
+T MScalar<short, short>::asinh(short)
+T MScalar<short, short>::atanh(short)
+T MScalar<short, short>::rceil(short)
+T MScalar<short, short>::rfloor(short)
+U MScalar<unsigned short, unsigned short>::CLASS_NAME
+T MScalar<unsigned short, unsigned short>::abs(unsigned short)
+T MScalar<unsigned short, unsigned short>::cos(unsigned short)
+T MScalar<unsigned short, unsigned short>::neg(unsigned short)
+T MScalar<unsigned short, unsigned short>::sin(unsigned short)
+T MScalar<unsigned short, unsigned short>::tan(unsigned short)
+T MScalar<unsigned short, unsigned short>::acos(unsigned short)
+T MScalar<unsigned short, unsigned short>::asin(unsigned short)
+T MScalar<unsigned short, unsigned short>::atan(unsigned short)
+T MScalar<unsigned short, unsigned short>::cosh(unsigned short)
+T MScalar<unsigned short, unsigned short>::sign(unsigned short)
+T MScalar<unsigned short, unsigned short>::sinh(unsigned short)
+T MScalar<unsigned short, unsigned short>::tanh(unsigned short)
+T MScalar<unsigned short, unsigned short>::acosh(unsigned short)
+T MScalar<unsigned short, unsigned short>::asinh(unsigned short)
+T MScalar<unsigned short, unsigned short>::atanh(unsigned short)
+T MScalar<unsigned short, unsigned short>::rceil(unsigned short)
+T MScalar<unsigned short, unsigned short>::rfloor(unsigned short)
+U MScalar<long long, long long>::CLASS_NAME
+T MScalar<long long, long long>::cos(long long)
+T MScalar<long long, long long>::sin(long long)
+T MScalar<long long, long long>::tan(long long)
+T MScalar<long long, long long>::acos(long long)
+T MScalar<long long, long long>::asin(long long)
+T MScalar<long long, long long>::atan(long long)
+T MScalar<long long, long long>::cosh(long long)
+T MScalar<long long, long long>::sinh(long long)
+T MScalar<long long, long long>::tanh(long long)
+T MScalar<long long, long long>::acosh(long long)
+T MScalar<long long, long long>::asinh(long long)
+T MScalar<long long, long long>::atanh(long long)
+T MScalar<long long, long long>::rceil(long long)
+T MScalar<long long, long long>::rfloor(long long)
+U MScalar<unsigned long long, unsigned long long>::CLASS_NAME
+T MScalar<unsigned long long, unsigned long long>::abs(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::cos(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::neg(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::sin(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::tan(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::acos(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::asin(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::atan(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::cosh(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::sign(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::sinh(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::tanh(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::acosh(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::asinh(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::atanh(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::rceil(unsigned long long)
+T MScalar<unsigned long long, unsigned long long>::rfloor(unsigned long long)
U Integral::almostEqual(double, double, double, double)
-W Integral::almostEqual(float, float, double, double)
-W Integral::cos(double)
-W Integral::exp(double)
-W Integral::log(double)
-W Integral::max(double, double)
-W Integral::min(double, double)
-W Integral::pow(double, double)
-W Integral::sin(double)
-W Integral::tan(double)
-W Integral::acos(double)
-W Integral::asin(double)
-W Integral::atan(double)
-W Integral::ceil(double)
-W Integral::cosh(double)
-W Integral::exp2(double)
-W Integral::hash(float, unsigned long)
-W Integral::log2(double)
-W Integral::sinh(double)
-W Integral::sqrt(double)
-W Integral::tanh(double)
-W Integral::acosh(double)
-W Integral::asinh(double)
-W Integral::atanh(double)
-W Integral::exp10(double)
-W Integral::floor(double)
-W Integral::log10(double)
-W Integral::log1p(double)
-W Integral::round(double)
-W Integral::hash_32(unsigned long, unsigned long)
-W Integral::fraction(double)
U SysString::setCapacity(long)
U SysString::assign(wchar_t const*)
U SysString::assign(double)
U SysString::assign(float)
-W SysString::concat(wchar_t const*)
U SysString::concat(SysString const&)
-W SysString::concat(double)
U SysString::freeMem()
U SysString::SysString[in-charge](wchar_t const*)
U SysString::SysString[in-charge](long)
U SysString::SysString[not-in-charge](long)
-W SysString::~SysString [in-charge]()
-W SysString::~SysString [not-in-charge]()
-W MScalar<double, double>::operator double() const
-W MScalar<float, float>::almostEqual(float) const
-W MScalar<float, float>::presentValue(double) const
-W MScalar<float, float>::eq(MScalar<float, float> const&) const
-W MScalar<float, float>::eq(float) const
-W MScalar<float, float>::eq(float, float) const
-W MScalar<float, float>::ge(float) const
-W MScalar<float, float>::gt(float) const
-W MScalar<float, float>::le(float) const
-W MScalar<float, float>::lt(float) const
-W MScalar<float, float>::ne(float) const
-W MScalar<float, float>::get(String&) const
-W MScalar<float, float>::hash(unsigned long) const
+T MScalar<SysComplex<double>, double>::presentValue(SysComplex<double>) const
+T MScalar<SysComplex<float>, float>::presentValue(SysComplex<double>) const
+T MScalar<SysComplex<long>, long>::presentValue(SysComplex<double>) const
+T MScalar<double, double>::presentValue(double) const
+T MScalar<double, double>::operator%(double) const
+T MScalar<float, float>::presentValue(double) const
U MScalar<float, float>::debug(wchar_t const*) const
-W MScalar<float, float>::operator float() const
-W MScalar<float, float>::operator/(float) const
-W MScalar<float, float>::operator==(float) const
-W MScalar<float, float>::operator>=(float) const
-W MScalar<float, float>::operator>(float) const
-W MScalar<float, float>::operator<=(float) const
-W MScalar<float, float>::operator<(float) const
-W MScalar<float, float>::operator-(float) const
-W MScalar<float, float>::operator*(float) const
-W MScalar<float, float>::operator!=(float) const
-W MScalar<float, float>::operator+(float) const
-W MScalar<float, float>::operator%(float) const
-W MScalar<unsigned char, unsigned char>::operator unsigned char() const
-W MScalar<long, long>::operator long() const
-W MScalar<unsigned long, unsigned long>::operator unsigned long() const
-W MScalar<short, short>::operator short() const
-W MScalar<unsigned short, unsigned short>::operator unsigned short() const
-W MScalar<long long, long long>::operator long long() const
-W MScalar<unsigned long long, unsigned long long>::operator unsigned long long() const
+T MScalar<float, float>::operator%(float) const
U SysString::get(float&) const
-W std::type_info::operator==(std::type_info const&) const
-W std::type_info::operator!=(std::type_info const&) const
U typeinfo for double
U typeinfo for float
U typeinfo for unsigned char
@@ -254,18 +194,14 @@
U __gxx_personality_v0
U acos
U asin
-U atan
-U ceil
U cos
U cosh
U exp
-U floor
U log
U log10
U modf
U pow
U sin
U sinh
-U sqrt
U tan
U tanh
--
http://www.PowerDNS.com Open source, database driven DNS Software
http://lartc.org Linux Advanced Routing & Traffic Control HOWTO
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2003-05-28 21:22 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2003-05-27 20:09 emitting templates as 'T'? Changed from 3.2 to 3.3 Benjamin Kosnik
2003-05-28 10:54 ` templated specializations get emitted in 3.3? bert hubert
2003-05-28 21:12 ` Benjamin Kosnik
2003-05-28 21:47 ` Joe Buck
2003-05-28 22:11 ` bert hubert
-- strict thread matches above, loose matches on Subject: below --
2003-05-27 17:08 emitting templates as 'T'? Changed from 3.2 to 3.3 bert hubert
2003-05-27 15:07 bert hubert
2003-05-27 15:47 ` Daniel Jacobowitz
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).