auto で値を初期化して、パラメーターとして decltype を期待する関数に渡すことができないのはなぜですか?
シーンを設定して、小さなプログラムをお見せしましょう。
値を返す関数を次に示します。
int Function(void);
この場合、たまたま整数ですが、戻り値の型は変更される可能性があります。
そのため、この次の関数は次のように記述されます。
void What_I_Take_Depends_On_Function(decltype(Function()) x);
関数の戻り値の型を変更する場合、この関数の減速を変更する必要はありません。はい、関数の定義が新しい型を正しく処理しない可能性があります。または、関数の戻り値の型が void に変更された場合、問題が発生しますが、それは私の問題とは関係ありません。
#include <iostream>
#include <cstdlib>
int Function(void){return 5;}
void What_I_Take_Depends_On_Function(decltype(Function()) x){return;}
int main(){
//assignments(Edit: these are initializations)
int var1 = Function();
auto var2 = Function();
//initializations
int var3 {Function()};
auto var4 {Function()};
What_I_Take_Depends_On_Function(var1); //works
What_I_Take_Depends_On_Function(var2); //works
What_I_Take_Depends_On_Function(var3); //works
What_I_Take_Depends_On_Function(var4); //COMPILER ERROR
//cannot convert ‘std::initializer_list<int>’ to ‘int’ for argument ‘1’ to ‘void What_I_Take_Depends_On_Function(int)’
return EXIT_SUCCESS;
}
では、なぜ var4 は int ではなく initializer_list なのですか?
Function が int を返すことを auto で推測してから
、減速を var3 に似たものに変更することはできませんか?