eldeshの日記: 戻り値型型推論 2.0 3
日記 by
eldesh
かなり前にSafiiさんに振られたネタだったけど,
明け方にふらふらしながらC++0xの話をしてたら, autoでの戻り値型型推論の理解(意味?)が怪しい事が判明したのでテスト.
decltypeは反則だよなーw(強力過ぎるという意味で)
明け方にふらふらしながらC++0xの話をしてたら, autoでの戻り値型型推論の理解(意味?)が怪しい事が判明したのでテスト.
decltypeは反則だよなーw(強力過ぎるという意味で)
#include <iostream>
#include <typeinfo>
using namespace std;
int I_D(double d){ return static_cast<int>(d); }
double I_D(int i){ return (i);
}
template< typename Arg >
auto wrapper( Arg arg ) -> decltype(I_D(arg))
{
cout << "type:" << typeid( decltype(I_D(arg)) ).name() << endl;
return I_D(arg);
}
int main(){
int x = wrapper(I_D(3.14));
double d = wrapper(I_D(4));
cout << x << ":" << d << endl;
return (0);
}
なんかしっくりきた感じ.
戻り値型の部分にautoを指定するのは,
インスタンス名(式)から推論するときに,まだ引数の解析が終わってないから(多分).
戻り値のauto (スコア:0)
アキラです。
戻り値のとこに書くautoは、ただのプレースホルダーらしいです。
(後ろに書いた戻り値の型は、前のautoに置き換えられる)
Re:戻り値のauto (スコア:1)
Re:戻り値のauto (スコア:1)
添削ありがとうございます!
理解が正しいようで良かった.
読み違えてた。。。
パーサにはともかく人間(のC++脳?)にはあんまり優しくない構文ですね(ぉ