Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
The latest version of this topic can be found at __if_exists Statement.
The __if_exists statement tests whether the specified identifier exists. If the identifier exists, the specified statement block is executed.
Syntax
__if_exists ( identifier ) {
statements
};
Parameters
| Parameter | Description |
|---|---|
identifier |
The identifier whose existence you want to test. |
statements |
One or more statements to execute if identifier exists. |
Remarks
Warning
To achieve the most reliable results, use the __if_exists statement under the following constraints.
Apply the
__if_existsstatement to only simple types, not templates.Apply the
__if_existsstatement to identifiers both inside or outside a class. Do not apply the__if_existsstatement to local variables.Use the
__if_existsstatement only in the body of a function. Outside of the body of a function, the__if_existsstatement can test only fully defined types.When you test for overloaded functions, you cannot test for a specific form of the overload.
The complement to the __if_exists statement is the __if_not_exists statement.
Example
Notice that this example uses templates, which is not advised.
// the__if_exists_statement.cpp
// compile with: /EHsc
#include <iostream>
template<typename T>
class X : public T {
public:
void Dump() {
std::cout << "In X<T>::Dump()" << std::endl;
__if_exists(T::Dump) {
T::Dump();
}
__if_not_exists(T::Dump) {
std::cout << "T::Dump does not exist" << std::endl;
}
}
};
class A {
public:
void Dump() {
std::cout << "In A::Dump()" << std::endl;
}
};
class B {};
bool g_bFlag = true;
class C {
public:
void f(int);
void f(double);
};
int main() {
X<A> x1;
X<B> x2;
x1.Dump();
x2.Dump();
__if_exists(::g_bFlag) {
std::cout << "g_bFlag = " << g_bFlag << std::endl;
}
__if_exists(C::f) {
std::cout << "C::f exists" << std::endl;
}
return 0;
}
Output
In X<T>::Dump
()
In A::Dump
()
In X<T>::Dump
()
T::Dump does not exist
g_bFlag = 1
C::f exists