Bir işlevin bir const mı yoksa const olmayan bir değer mi döndürdüğünü anlamanın bir yolu var mı? decltype
, başvurular için çalışır, ancak başvuru dışı türler için çalışmayacaktır. İşlev tarafından döndürülen türün sabitliğini anlama
#include <type_traits>
template<typename>
struct print_type; //undefined
int main(){
auto lambda = []()->const int{ return 0; };
print_type< decltype(lambda()) > dt; //print_type<int>
print_type< typename std::result_of<decltype(lambda)()>::type > ro;
//print_type<int>
return 0;
}
bir
std::tuple
her demet elemanı üzerinde bir işlev nesnesini arayıp dönüş türleri oluşan yeni bir
tuple
saklayacak fonksiyonu dönüşümü uygulanır. Bu oldukça şaşırtıcı (ancak gerekli) const dönüş türleri için işe yaramıyor.
'Aralık ltype, bir dönüş değerinin (fark ettiğiniz gibi) yapısını korumaz. http://stackoverflow.com/questions/18502188/why-does-decltype-remove-const-from-return-types-for-built-in-types – CoryKramer
Sınıf dışı, dizi dışı türler için, hayır, yok Bir şekilde (bildiğim, her zaman umudumu tutabilirim). Sınıf türleri için önemsiz. Örneğinizde 'int 'açıkça bir sınıf tipi ve dizi tipi değildir. – WhozCraig