サンプルソースgcc-3.3 on MacOS X で実験 (-O3 -S) すると、

  • use_static_for() は即値 (5445) を返す。
  • use_normal_for() は真面目にループを回す。

#include <iostream>
#include <boost/call_traits.hpp>
#include <Static_For.h>

template <typename T>
class Sum {
public:
typedef typename boost::call_traits<T>::value_type value_type;
typedef typename boost::call_traits<T>::param_type param_type;

private:
value_type value_;

public:
Sum() : value_(0) {}

void operator()(param_type value) {
value_ += value;
}

value_type operator*() const {
return value_;
}
};

int use_static_for() {
return *Static_For<100>::static_for(Sum<std::size_t>());
}

int use_normal_for() {
std::size_t value = 0;
for (std::size_t i = 0; i < 100; ++i) {
value += i;
}
return value;
}

int
main(int, char* []) {
std::cout
<< use_static_for() << std::endl
<< use_normal_for() << std::endl;
return 0;
}