// 1 filename:cpp2011-7-3-4.cpp // ver 0.1 June.13, 2014 // // 2 original examples and/or notes: // (c) ISO/IEC JTC1 SC22 WG21 N3242, April 12, 2011 // http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf // > 7 Declarations 7.3 Namespaces 7.3.4 Using directive // // 3 compile and output mechanism: // (c) Dr. OGAWA Kiyoshi, kaizen at gifu-u.ac.jp, // // 4 compile errors and/or warnings: // 4.1(c) Apple LLVM version 5.1 (clang-503.0.40) (based on LLVM 3.4svn) // Target: x86_64-apple-darwin13.2.0, Thread model: posix // Command/Options: c++ -std=c++11 -stdlib=libc++ -Wall cpp2011-7-3-4.cpp // (c) LLVM 2003-2009 University of Illinois at Urbana-Champaign. // 4.2. g++-4.9 (GCC) 4.9.0 20131229 (experimental) // Copyright (C) 2013 Free Software Foundation, Inc. // This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. // http://gcc.gnu.org/onlinedocs/gcc/Standards.html // Command/Options: g++-4.9 -std=c++11 -Wall cpp2011-7-3-4.cpp // g++-4.9: error: unrecognized command line option '-stdlib=libc++' // Configuration:brew install gcc49 // // 4.3. Visual Studio Express 2013, // (c) Microsoft http://www.visualstudio.com/ // SPEC: // Windows 7, .NET Framework // (c) VMware, Inc. // VMWare fusion 6 // // 5. Hardware: MacBook Pro, //(c) Intel http://ark.intel.com/products/37006/ //Core 2 Duo 2.53GHz, 8GB, 1067MHz DDR3 // // 6. Special Thanks: Upper organizatios and // ITSCJ/IPSJ http://www.itscj.ipsj.or.jp/itscj_english/index.html // Renesas Electronics Corporation.http://www.renesas.com/ // NPO SESSAME project, http://www.sessame.jp/workinggroup/WorkingGroup3/ // Toyo Corporation, http://www.toyo.co.jp/English/ // Japan Standard Association, http://bit.ly/1lzykg1 // NPO TOPPERS project, https://www.toppers.jp/asp-d-download.html // Daido Universcity, http://www.daido-it.ac.jp/gakubugakka/computer/index.html // WITZ Co.Ltd., http://www.witz-inc.co.jp/products/solution/solution.html // SevenWise.co., http://www.7ws.co.jp/index.html // TOYOTA Motor Corporation, http://toyota.jp/ // IT planning Inc., http://www.itpl.co.jp/en/index.html // DENSO Corporation, http://www.globaldenso.com/en/ // Aisin Seiki co. Ltd., http://www.aisin.com/ // Spancion Inc., http://www.spansion.com/ // Yazaki Corporation, http://www.yazaki-group.com/global/ // Pananosic Corporation, http://www.panasonic.net/ // SWEST: Summer Workshop on Embedded System Technologies , http://swest.toppers.jp // CEST: Consortium for Embedded System Technology, http://www.ertl.jp/CEST/ // JUSE: Union of Japanese Scientists and Engineers, http://www.juse.or.jp/e/ // OSC:Open Source Conference, http://www.ospn.jp/ #include //#include //#include //#include //#include //#include //#include //#include //#include using namespace std; namespace A { int i; namespace B { namespace C { int i; } using namespace A::B::C; void f1() { i = 5; // OK, C::i visible in B and hides A::i } } namespace D { using namespace B; using namespace C; void f2() { //error: i = 5; // ambiguous, B::C::i or A::i? } } void f3() { i = 5; // uses A::i } } void f4() { //error: i = 5; // ill-formed; neither i is visible } // namespace M { int i; } namespace N { int i; using namespace M; } void f() { using namespace N; //error: i = 7; // error: both M::i and N::i are visible } namespace A { int i2; } namespace B { int i2; int j; namespace C { namespace D { using namespace A; int j; int k; int a = i2; // B::i hides A::i } using namespace D; int k = 89; // no problem yet //error: int l = k; // ambiguous: C::k or D::k int m = i2; // B::i hides A::i int n = j; // D::j hides B::j } } // namespace A { class X { }; extern "C" int g(); extern "C++" int h(); } namespace B { void X(int); extern "C" int g(); extern "C++" int h(int); } using namespace A; using namespace B; void f2() { X(1); // error: name X found in two namespaces g(); // okay: name g refers to the same entity h(); // okay: overload resolution selects A::h } // namespace D { int d1; void f4(char); } using namespace D; int d1; // OK: no conflict with D::d1 namespace E { int e; void f4(int); } namespace D { // namespace extension int d2; using namespace E; void f4(int); } void f4() { d1++; // error: ambiguous ::d1 or D::d1? ::d1++; // OK D::d1++; // OK d2++; // OK: D::d2 e++; // OK: E::e //error: f(1); // error: ambiguous: D::f(int) or E::f(int)? f4('a'); // OK: D::f(char) } int main() { // cout << f4 << std::endl; cout << "7 Declarations 7.3 Namespaces 7.3.4 Using directive" << std::endl; return 0; } // 1 error // 1.1 c++ -std=c++11 -stdlib=libc++ -Wall cpp2011-7-3-4.cpp cpp2011-7-3-4.cpp:140:17: error: reference to 'B' is ambiguous using namespace B; ^ cpp2011-7-3-4.cpp:134:11: note: candidate found by name lookup is 'B' namespace B { ^ cpp2011-7-3-4.cpp:73:11: note: candidate found by name lookup is 'A::B' namespace B { ^ cpp2011-7-3-4.cpp:142:1: error: no matching conversion for functional-style cast from 'int' to 'A::X' X(1); // error: name X found in two namespaces ^~~ cpp2011-7-3-4.cpp:130:7: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'int' to 'const A::X' for 1st argument class X { }; ^ cpp2011-7-3-4.cpp:130:7: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'int' to 'A::X' for 1st argument class X { }; ^ cpp2011-7-3-4.cpp:130:7: note: candidate constructor (the implicit default constructor) not viable: requires 0 arguments, but 1 was provided cpp2011-7-3-4.cpp:151:17: error: reference to 'D' is ambiguous using namespace D; ^ cpp2011-7-3-4.cpp:147:11: note: candidate found by name lookup is 'D' namespace D { ^ cpp2011-7-3-4.cpp:82:11: note: candidate found by name lookup is 'A::D' namespace D { ^ cpp2011-7-3-4.cpp:162:6: error: redefinition of 'f4' void f4() { ^ cpp2011-7-3-4.cpp:93:6: note: previous definition is here void f4() { ^ cpp2011-7-3-4.cpp:165:1: error: expected a class or namespace D::d1++; // OK ^ cpp2011-7-3-4.cpp:165:1: error: reference to 'D' is ambiguous D::d1++; // OK ^ cpp2011-7-3-4.cpp:157:11: note: candidate found by name lookup is 'D' namespace D { // namespace extension ^ cpp2011-7-3-4.cpp:82:11: note: candidate found by name lookup is 'A::D' namespace D { ^ cpp2011-7-3-4.cpp:166:1: error: use of undeclared identifier 'd2'; did you mean 'D::d2'? d2++; // OK: D::d2 ^~ D::d2 cpp2011-7-3-4.cpp:158:5: note: 'D::d2' declared here int d2; ^ cpp2011-7-3-4.cpp:167:1: error: use of undeclared identifier 'e'; did you mean 'D::e'? e++; // OK: E::e ^ D::e cpp2011-7-3-4.cpp:154:5: note: 'D::e' declared here int e; ^ cpp2011-7-3-4.cpp:169:1: error: no matching function for call to 'f4' f4('a'); // OK: D::f(char) ^~ cpp2011-7-3-4.cpp:162:6: note: candidate function not viable: requires 0 arguments, but 1 was provided void f4() { ^ 9 errors generated.