digitalmars.D.learn - private template members
- hunt0r <nomail nowhere.com> May 01 2011
- Dmitry Olshansky <dmitry.olsh gmail.com> May 01 2011
- hunt0r <nomail nowhere.com> May 01 2011
- Dmitry Olshansky <dmitry.olsh gmail.com> May 01 2011
- Mike Wey <mike-wey example.com> May 01 2011
hi,
It seems that template members of a class are always public.
having a class like:
class Test
{
private:
int x;
template test(T)
{
void test(T t) {x= 100;}
}
public:
int getX() {return x;}
}
and calling:
Test t = new Test;
t.test();
prints 100 instead of saying that the member test is not accessable.
Is it not possible to get private template members with D?
May 01 2011
On 01.05.2011 13:37, hunt0r wrote:hi, It seems that template members of a class are always public. having a class like: class Test { private: int x; template test(T) { void test(T t) {x= 100;} } public: int getX() {return x;} } and calling: Test t = new Test; t.test(); prints 100 instead of saying that the member test is not accessable. Is it not possible to get private template members with D?
same one. The access protection in D is module level, meaning you can access private members of the class in the same module. There are some known bugs about it: http://d.puremagic.com/issues/show_bug.cgi?id=3108 <http://d.puremagic.com/issues/show_bug.cgi?id=314> -- Dmitry Olshansky
May 01 2011
I was calling it from another module:
in file Test.d:
class Test
{
private:
int x;
void testNonTemplate()
{
}
template test()
{
void test() {x= 100;}
}
public:
int getX() {return x;}
}
In file main.d:
import Test;
Test t = new Test;
t.test(); /*ok*/
t.testNonTemplate(); /*error*/
writeln(t.getX()); /* prints 100 */
I am using dmd 2.052
May 01 2011
On 01.05.2011 16:38, hunt0r wrote:I was calling it from another module: in file Test.d: class Test { private: int x; void testNonTemplate() { } template test() { void test() {x= 100;} } public: int getX() {return x;} } In file main.d: import Test; Test t = new Test; t.test(); /*ok*/ t.testNonTemplate(); /*error*/ writeln(t.getX()); /* prints 100 */ I am using dmd 2.052
suggest to file it anyway. It sill fails on my almost newest DMD from github. -- Dmitry Olshansky
May 01 2011
On 05/01/2011 03:15 PM, Dmitry Olshansky wrote:On 01.05.2011 16:38, hunt0r wrote:I was calling it from another module: in file Test.d: class Test { private: int x; void testNonTemplate() { } template test() { void test() {x= 100;} } public: int getX() {return x;} } In file main.d: import Test; Test t = new Test; t.test(); /*ok*/ t.testNonTemplate(); /*error*/ writeln(t.getX()); /* prints 100 */ I am using dmd 2.052
suggest to file it anyway. It sill fails on my almost newest DMD from github.
Probably this one: http://d.puremagic.com/issues/show_bug.cgi?id=2775 -- Mike Wey
May 01 2011








Mike Wey <mike-wey example.com>