title: How to Bypass a Standard C++ Function While Maintaining Its Functionality
body: <p>I am looking for a way to be able to redefine a set of POSIX functions but then end the redefinition with a call to the original function. The idea is that I am trying to create a layer that can restrict what OS API's can be called depending on which "profile" is active. This "profile" determines what set of functions are allowed and any not specified should not be used.</p>
  
  <p>For example, if in one profile I am not allowed to use strcpy, I would like to be able to either cause a compile time error (via static_assert) or print something to the screen saying "strcpy is not allowed in this profile" such as below:</p>
  
  <p>MY_string.h</p>
  
  <pre><code>#include &lt;string.h&gt;
  
  char *strcpy(char *restrict s1, const char *restrict s2)
  {
  #if defined(PROFILE_PASS_THROUGH)
      printf("strcpy is not allowed in this profile\n");
      return strcpy(s1, s2);
  #elif defined(PROFILE_ERROR)
      static_assesrt(0, "strcpy is not allowed in this profile\n");
      return 0;
  #else
      return strcpy(s1, s2);
  #endif
  }
  </code></pre>
  
  <p>So that way within main.cpp I can use MY_string.h</p>
  
  <pre><code>#define PROFILE_PASS_THROUGH
  #include "MY_string.h"
  
  int main()
  {
      char temp1[10];
      char temp2[10];
      sprintf(temp2, "Testing");
      if (0 = strcpy(temp1, temp2))
      {
          printf("temp1 is %s\n", temp1);
      }
      return 0;
  }
  </code></pre>
  
  <p>Now I realize that the code I have written above will not compile properly due to the redefinition of strcpy, but is there a way to allow this sort of functionality without playing around with macros or creating my own standard c and c++ libraries?</p>