By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
435,106 Members | 2,679 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 435,106 IT Pros & Developers. It's quick & easy.

"using namespace" within a class declaration?

P: n/a
Is it valid to use a "using namespace foo" (as opposed to
using foo::bar which I'm sure is legal) within a class
declaration? My compiler rejects it, but I've been told it's
valid.

Can anyone please confirm or deny?

TIA,
- J.
Jul 22 '05 #1
Share this Question
Share on Google+
2 Replies


P: n/a
Jacek Dziedzic wrote:
Is it valid to use a "using namespace foo"
(as opposed to using foo::bar which I'm sure is legal)
within a class declaration?
My compiler rejects it, but I've been told it's valid.

Can anyone please confirm or deny?
cat test.cc #include <iostream>

class X {
private:
// representation
int I;
public:
using namespace std;
using std::endl;
X(int i = 0): I(i) {
cout << "X(" << i << ")" << endl;
}
};

int main(int argc, char* argv[]) {
X x(13);
std::cout << "The end!" << std::endl;
return 0;
}
g++ -Wall -ansi -pedantic -o test test.cc

test.cc:8: parse error before `namespace'
test.cc:9: using-declaration for non-member at class scope
test.cc: In constructor `X::X(int)':
test.cc:11: `cout' undeclared (first use this function)
test.cc:11: (Each undeclared identifier is reported \
only once for each function it appears in.)
test.cc:11: `endl' undeclared (first use this function)
test.cc: In function `int main(int, char**)':
test.cc:16: warning: unused variable `X x'

Jul 22 '05 #2

P: n/a
"Jacek Dziedzic" <ja*************@janowo.net> wrote in message
news:c6**********@korweta.task.gda.pl
Is it valid to use a "using namespace foo" (as opposed to
using foo::bar which I'm sure is legal) within a class
declaration? My compiler rejects it, but I've been told it's
valid.

Can anyone please confirm or deny?

TIA,
- J.


Both Comeau online and VC++ 7.1 reject both and say that using declarations
must involve base class names. For example, the following won't compile:

#include <iostream>
class A
{
public:
using std::cout;
A()
{
cout << "A constructed\n";
}
};

nor will

#include <iostream>
class A
{
public:
using namespace std;
A()
{
cout << "A constructed\n";
}
};

On the other hand, if you move the using directive/declaration inside a
function, it is a different story. The following is fine:

class A
{
public:
A()
{
using namespace std;
using std::cout;
cout << "A constructed\n";
}
};
--
John Carson
1. To reply to email address, remove donald
2. Don't reply to email address (post here instead)

Jul 22 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.