Export (0) Print
Expand All

__if_exists Statement

The __if_exists statement tests whether the specified identifier exists. If the identifier exists, the specified statement block is executed.

__if_exists ( identifier ) { 
statements
};

Parameter

Description

identifier

The identifier whose existence you want to test.

statements

One or more statements to execute if identifier exists.

Caution noteCaution

To achieve the most reliable results, use the __if_exists statement under the following constraints.

  • Apply the __if_exists statement to only simple types, not templates.

  • Apply the __if_exists statement to identifiers both inside or outside a class. Do not apply the __if_exists statement to local variables.

  • Use the __if_exists statement only in the body of a function. Outside of the body of a function, the __if_exists statement 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.

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;
}

In X<T>::Dump()
In A::Dump()
In X<T>::Dump()
T::Dump does not exist
g_bFlag = 1
C::f exists

Community Additions

ADD
Show:
© 2014 Microsoft