inline 関数を使用場所より後で定義してもいいか?

すぐ忘れるので,メモ. inline 関数は,先行宣言しておくことで,定義が使用場所より後にある場合でも問題なく使える
補足.
例えば,

#include <iostream>
using namespace std;
inline void print_hoge(void);  // 先行宣言
int main(int argc, char**argv)
{
  print_hoge();               // 使用場所
  return 0;
}
inline void print_hoge(void)  // 定義
{
  cout<<"hoge"<<endl;
}

こんな例を考える. inline 関数 print_hoge の定義は,使用場所よりも後にあるが,先行宣言が使用場所よりも前にあるので,問題なく使える.

一応, inline 化されているか確認しておこう. g++ で -O2 をつけて最適化し, nm でシンボルテーブルを覗く:

g++ post-inline-def.cpp -O2
nm a.out | less

print_hoge がないことがわかる.これでも信じられない人は,上のサンプルプログラムから inline を除いてコンパイルしてみよう. nm を使えば,シンボルテーブルに print_hoge が含まれていることがわかるはずだ.