C++ で、Ruby っぽいべき乗計算

Ruby では以下のコードで、べき乗の計算を行うことが出来ます。

puts 2 ** 3  # 8

と、いうことで、C++ でも書いてみました。

[ソース]

#include <cmath>
#include <iostream>

namespace detail{

template<typename T>
struct pow_impl{
    
    pow_impl(T const& t) : exponent_(t){}
    
    struct exponent{
        exponent(T const& t) : value_(t){}
        T value_;
    };
    
    exponent operator *() const{
        return exponent_;
    }
    exponent exponent_;
};

template<typename T, typename U>
T
operator *(T const& base, U const& exponent){
    return std::pow(base, exponent.value_);
}

}  // namespace detail


template<typename T>
detail::pow_impl<T>
pow_(T const& t){
    return detail::pow_impl<T>(t);
}

int
main(){
    std::cout << std::pow(2.0, 3) << std::endl;
    std::cout << 2.0 ** pow_(3) << std::endl;     // 2.0 * (*pow_(3))
    return 0;
}

[出力]

8
8

pow_ でラップしないとダメなのが悲しいです。

[追記]

こっそりと突っ込まれていたので修正。
ひーごめんなさい。