Use this tag for questions related to the 'using' keyword in C++.
Questions tagged [using-declaration]
164 questions
1224
votes
8 answers
What is the difference between 'typedef' and 'using' in C++11?
I know that in C++11 we can now use using to write type alias, like typedefs:
typedef int MyInt;
Is, from what I understand, equivalent to:
using MyInt = int;
And that new syntax emerged from the effort to have a way to express "template…

Klaim
- 67,274
- 36
- 133
- 188
31
votes
4 answers
Why are two using clauses resolving to the same type seen as ambigious in gcc
I have two base classes with using clauses
class MultiCmdQueueCallback {
using NetworkPacket = Networking::NetworkPacket;
....
}
class PlcMsgFactoryImplCallback {
using NetworkPacket = Networking::NetworkPacket;
....
}
I then…

Andrew Goedhart
- 937
- 9
- 17
26
votes
2 answers
A weird behavior of using-declaration
please see the following code
struct A { using type = int; };
struct B : private A {};
struct C : B { using base_type = A; };
All of gcc 6.1, clang 3.8, and msvc 2015 update 3 refuse to compile this, as A is not an accessible name inside C since A…

Junekey Jeon
- 1,496
- 1
- 11
- 18
25
votes
1 answer
using-declaration in derived class does not hide same function derived from base class
Have a look at the following code:
struct A {
public:
virtual void f(){std::cout << "in A";};
};
struct B : A{
public:
virtual void f(){std::cout << "in B";};
int a;
};
struct C : B{
using A::f;
void test(){f();}
};
int main()…

Liu Nick
- 349
- 2
- 9
19
votes
2 answers
Program with chaining of using-declarations compiles on MSVS and clang but not on GCC
Is the following program well-formed or ill-formed according to the c++ standard?
namespace X { int i; }
namespace Y { using X::i; }
int main() { using X::i; using Y::i; }
I'm getting different results with different compilers:
MSVS: Compiles (…

Supremum
- 542
- 7
- 23
19
votes
3 answers
using directive vs using declaration swap in C++
Please refer to the code below:
#include
namespace N
{
template
class C
{
public:
void SwapWith(C & c)
{
using namespace std; // (1)
//using std::swap; // (2)
…

ilovekonoka
- 303
- 1
- 2
- 6
18
votes
2 answers
Applying "using" keyword on C++ pure virtual function
The Class B is overriding the pure Virtual Function "print()" of class A. Class C is inheriting Class B as well as having a "using A::print" statement.
Now why Class C is not an abstract class?
class A {
public :
virtual void print()…

Gtrex
- 247
- 1
- 7
18
votes
1 answer
In using-declaration, can dependent names render to constructors after template substitution?
In this example:
template
struct S : T
{
using T::X;
};
T::X is a dependent name that refers to the member X in T.
If S is instantiated with T = X:
struct X
{
X(int) {}
};
...
S s(42);
Will the using-declaration become…

Jamboree
- 5,139
- 2
- 16
- 36
18
votes
1 answer
A using-declaration can not be repeated in function scope. Why is that?
In [namespace.udecl]/10 you have the following example:
namespace A {
int i;
}
namespace A1 {
using A::i;
using A::i; // OK: double declaration
}
void f() {
using A::i;
using A::i; // error: double declaration
}
This snippet…

Belloc
- 6,318
- 3
- 22
- 52
17
votes
4 answers
C++ using keyword
What is the difference between these two usage of using keyword:
using boost::shared_ptr;
and
using namespace boost;

Bitmap
- 12,402
- 16
- 64
- 91
16
votes
1 answer
Trying to define namespace member via using-declaration
Consider the following program. Is it well-formed or not according to the c++ standard (references to relevant parts of the standard needed):
namespace X { extern int i; }
namespace N { using X::i; }
int N::i = 1;
int main() {}
I'm getting…

Supremum
- 542
- 7
- 23
16
votes
1 answer
C++ - How to introduce overload set from variadic number of bases.
The derived class hides the name of an overload set from the base class if the derived class has the same name defined, but we can always introduce that overload set back with using-declaration:
template
class A : public BASE
{
public:
…

Single34
- 161
- 2
15
votes
4 answers
C++0x confusion with using declarations
What should happen for this case:
struct A {
void f();
};
struct B : virtual A {
using A::f;
};
struct C : virtual A {
using A::f;
};
struct D : B, C {
void g() {
f();
}
};
The line of interest is f(). Clearly the lookup of f…

Johannes Schaub - litb
- 496,577
- 130
- 894
- 1,212
13
votes
1 answer
Compile error when defining a member function, but only in GCC
The following program compiles without errors with MSVS, clang and GCC:
class A;
namespace Y {
using ::A;
class A {};
}
int main() {}
Now let's define a member function. Now it still compiles with MSVS and clang, but not with GCC:
class…

Supremum
- 542
- 7
- 23
13
votes
2 answers
C++ using declaration with typename in inheriting-constructors
While reading this question, I found a strange point:
template
class Subclass : public Baseclass
{
public:
using typename Baseclass::Baseclass;
// ^^^^^^^^
};
Since typename, Baseclass::Baseclass should be injected…

ikh
- 10,119
- 1
- 31
- 70