November 13, 2002 problem with enums in namespaces, and operator-> in templates | ||||
|---|---|---|---|---|
| ||||
Hi,
I tried out dm and encountered two problems.
1.) Declaration of enum constants in namespaces:
Example:
namespace storage {
enum type
{
dumb,
place,
pool,
heap
};
}
If i try to explicitely use these constants, like
unsigned int test = storage::heap;
-> error: namespace storage has no member heap
(while implicitely using them works ok, like
enum storage::type test = heap;
-> ok
)
2.) Problems with overriden operator->() in templates
If i have overriden the -> operator in a template class, and
i instantiate it with something where -> doesn't makes sense, i get an error
(even if i don't use the -> operator).
The dm compiler should only instantiate those templates which are really
needed, this would be more convenient. For example the gnu gcc and
visual c++ 7.0 doesn't complain, if you don't use the template
operator->()
class Test {
public:
double m;
}
smartptr<Test> p1;
p->m = 0.3; // ok
smartptr<int> p2; // ok if you don't use '->'
Best regards
Norbert Irmer
| ||||
November 13, 2002 Re: problem with enums in namespaces, and operator-> in templates | ||||
|---|---|---|---|---|
| ||||
Posted in reply to 8irmer | 8irmer@informatik.uni-hamburg.de wrote: > Hi, > > I tried out dm and encountered two problems. > > 2.) Problems with overriden operator->() in templates > > If i have overriden the -> operator in a template class, and > i instantiate it with something where -> doesn't makes sense, i get an error > (even if i don't use the -> operator). > The dm compiler should only instantiate those templates which are really > needed, this would be more convenient. For example the gnu gcc and > visual c++ 7.0 doesn't complain, if you don't use the template > operator->() Actually, I believe that it is more than just "more convenient". From what I can tell, the standard actually requires that unused template members _must_not_ be instantiated. I don't have the standard itself sitting around, but I've seen enough references to designs that rely on the non-instantiation that I feel relatively confident that it is in the standard. > class Test { > public: > double m; > } > > smartptr<Test> p1; > p->m = 0.3; // ok > > smartptr<int> p2; // ok if you don't use '->' > > > Best regards > Norbert Irmer Mac | |||
Copyright © 1999-2021 by the D Language Foundation
Permalink
Reply