/******************************************************************************/ /* */ /* FILE: november.cpp */ /* */ /* printf, C++ - style */ /* =================== */ /* */ /* Compiled and tested with Visual C++ V7.0 BETA */ /* When compiled with VC6.0, it will NOT work as intended !! */ /* */ /* V1.00 30-NOV-2001 P. Tellenbach https://www.heimetli.ch/ */ /* */ /******************************************************************************/ #include <iostream> using std::cout ; using std::endl ; char *s = "Hello world !" ; template< char *str > int printf( const char *, ... ) { cout << str << endl ; return int() ; } int main( void ) { return printf<s>( "printf( %d, %c, %s ) ;\n", 1, '2', "3" ) ; }
Update 28. September 2021
char * is no longer acceptable as a template argument. Using a reference fixed this problem. The string literal required the use of const.
/******************************************************************************/ /* */ /* FILE: november.cpp */ /* */ /* printf, C++ - style */ /* =================== */ /* */ /* Compiled and tested with Visual C++ V7.0 BETA */ /* */ /* V1.00 30-NOV-2001 P. Tellenbach https://www.heimetli.ch/ */ /* */ /* Compiled and tested with g++ V10.2.1 */ /* */ /* V1.00 28-NOV-2021 P. Tellenbach https://www.heimetli.ch/ */ /* */ /******************************************************************************/ #include <iostream> using std::cout ; using std::endl ; const char *s = "Hello world !" ; template< const char *&str > int printf( const char *, ... ) { cout << str << endl ; return int() ; } int main( void ) { return printf<s>( "printf( %d, %c, %s ) ;\n", 1, '2', "3" ) ; }