cout << "HelloWorld" << endl; // 意外と奥深い!?

cout << "HelloWorld" << endl;

2chで見つけたのだが、HelloWorldに関して挑戦者求む!【言語指定】Restricted Words by @cielavenir cielavenir│CodeIQで下記のような出題があったようだ。

標準出力に
Hello World
と出力するプログラムを作成して下さい。

ただし、数値、文字及び文字列リテラルを解答に含めることはできません。
Perlのqqやqw、Rubyの%Q、%q、%wなども避けたほうが評価が高くなります。
言語仕様をフル活用して下さい!

つまり"Hello World"'H'chr(72)int a = 1;などの文字列や数値を直接使わずHello Worldを出力するということだ。
シンプルな回答としては何とかして0とか1を取得し「インクリメントして数値を作り出し、char型に変換」をHelloWorld分繰り返す。

だが断る

何故なら面倒だから

ということで以下サンプル
# 厳密には"Hello World"ではなく"HelloWorld"のサンプル

マクロを使って

HelloWorld1.cpp

#include <iostream>

using namespace std;
int zero;

#define address2str(func) #func
void HelloWorld1() {
  // nil
}

int main() {
  cout << address2str(HelloWorld1) << endl;
  return zero;
}

実行結果

$ ./a.out 
HelloWorld1

デバッグマクロを使って

HelloWorld2.cpp

#include <iostream>

using namespace std;
int zero;

const char* HelloWorld2() {
  return __func__;
}

int main() {
  cout << HelloWorld2() << endl;
  return zero;
}

実行結果

$ ./a.out 
HelloWorld2

typeidを使って

HelloWorld3.cpp

#include <iostream>
#include <typeinfo>
#include <cxxabi.h>

using namespace std;
int zero;

class HelloWorld3 {
public:
  char* getHelloWorld() {
    int status;
    return abi::__cxa_demangle(typeid(*this).name(), (char*)zero, (size_t*)zero, &status);
  }
};

int main() {
  HelloWorld3 *hw3 = new HelloWorld3();
  cout << hw3->getHelloWorld() << endl;
  delete hw3;
  return zero;
}

実行結果

$ ./a.out 
HelloWorld3

なお普通じゃないHello World問題「Restricted Words」の解説記事 #伝説 #しえる|CodeIQ MAGAZINEには他の解法も少し紹介してあるので見てみると面白いかも

ただし、いずれも役に立たないw
役に立つとすればデバッグ時のログ出力くらいではないだろうか