C++の組み込み型はクラスとして扱える

タイトル通り。

doubleという名前のクラスと思って以下でdoubleの値を生成できる。

double a = double()
double b = double(1.0)

ポインタも同様のことが可能だがtypedefが必要

double* a = double*(); //error
double* b = (double*)(); //error
typedef double* pointer;
double* c = pointer();

#include <iostream>

struct Test {
    typedef double value_type;
    typedef double* pointer_type;
};

void test(double test) {
    std::cout << "double" << std::endl;
}

void test(Test::value_type*) {
    std::cout << "pointer" << std::endl;
}

int main(int argc, char const* argv[])
{
    double a = double();
    double b = double(1.0);
    double c = double(b);
    std::cout << a << ", " << b << ", " << c<< std::endl;
    //実行結果
    //0, 1, 1
    
    test(Test::value_type());
    test(Test::pointer_type());
    //実行結果
    //double
    //pointer

    //double *d = (double*)(); //error
    double *d = Test::pointer_type();
    double *e = Test::pointer_type(&a);

    std::cout << d << ", " << e << std::endl;
    //実行結果
    //0, 0x7fff57530970


    return 0;
}