void func1(..) を void func2(..) から return できるか検証

戻り値が void 型である関数 func1 を,戻り値が void 型であるほかの関数 func2 において,

  return func1(..);

のように返せるか実験してみた.
とりあえず,検証コードを書いてみる:

#include <iostream>
using namespace std;

void func1(void)
{
  cout<<"hoge"<<endl;
}
void func2(void)
{
  return func1();
}

int main(int argc, char**argv)
{
  func2();
  return 0;
}

コンパイルには g++-4.3 を使った.ただしオプションに -ansi と -pedantic をつけて,ANSI準拠にした:

  g++ -ansi -pedantic return-void.cpp

結果:コンパイルは通った.

ほかのコンパイラでは試していないのだが,(g++判断で)ANSI準拠のようなので, void func1(..) を void func2(..) から return できるという結論にしておく*1

何に使えるのか

マクロを使って関数を生成するときに, int func1(..) を int func2(..) から return できるのと同様のルールが void にも当てはまるなら,マクロの設計が簡単になる.稀なケースだが.

*1:規格を読んでみたが,どこに書いてあるか分かりません.orz..