C++ preprocessor protocol constructor