Tim Goetze wrote: > [Clemens Ladisch] > > Tim Goetze wrote: > >> Enter gcc version 3, which drops multi-line inline assembly support. > > > > The following compiles fine with gcc 3.3.3: > > > > __asm__ ("nop\n" > > "nop\n"); > > May compile fine, but like this a 100-line __asm__ goes well beyond my > pain threshold when it comes to readability and maintainability.
You mean you want to omit \n and the quotes? That was always invalid in both C and C++. > > If your external functions use the correct type (i.e., a pointer to > > the base type), the compiler will automatically cast class pointers in > > the correct way. Otherwise, you have to cast to the base type > > yourself whenever you 'export' a pointer. > > Believe me I have tried to come up with sensible solutions but there's > quite a lot more to it than just fixing a few thousand pointer casts. > > Basically, you can't rectify the problem because the basic Python > Object type (from which my types are derived) is actually at a fixed > offset into a Python garbage-collected structure. I assumed your objects should just be accessed from Python, but it's of course different if they are to be managed by Python. You could introduce an additional layer of indirection: hold a separate C++ object with a pointer from the Python-managed object. > The following is OK for an older g++: > > void > Descriptor<AmpIV>::setup() > { > UniqueID = 1794; > ... > } > > but g++ since 4.0 wants this instead: > > template <> void > Descriptor<AmpIV>::setup() > { > ... > } > > I cannot for the life of me imagine a good reason why "template <>" > should be necessary. It's needed because A) the standard says so; B) Descriptor is still a template, even if all template parameters happen to be specialized. > "setup()" was never declared as a template, let alone one with an > empty template parameter. I guess you don't want to hear it, but if setup() was declared as a template, you would have to write something like this: template <> template <class T> void Descriptor<AmpIV>::setup<T>() { ... } > If this is indeed prescribed by the language standard, I'll have a > very, very hard time getting over it. For completely specialized templates, you can avoid the "template<>" stuff like this: typedef Descriptor<AmpIV> Amp4Descriptor; // no "template" needed here void Amp4Descriptor::setup() {...} > It may not look like much but you have to understand that to me > coding is also an exercise in aesthetics. "aesthetics" is not a keyword in C++. ;-) Regards, Clemens