You call it with: | Your function prototype is: | template<typename T> |
template<typename T> |
template<typename T> |
template<typename T> |
---|---|---|---|---|---|
(Tested with GCC 7.2 using -std=c++17 ) | |||||
int x; |
T is | int | int | int | int& |
decltype(val) is | int | int& | const int& | int& | |
decltype((val)) is | int& | int& | const int& | int& | |
const int y; |
T is | int | const int | int | const int& |
decltype(val) is | int | const int& | const int& | const int& | |
decltype((val)) is | int& | const int& | const int& | const int& | |
func(5); |
T is | int | ⛔ | int | int |
decltype(val) is | int | const int& | int&& | ||
decltype((val)) is | int& | const int& | int& | ||
func(std::move(x)); |
T is | int | ⛔ | int | int |
decltype(val) is | int | const int& | int&& | ||
decltype((val)) is | int& | const int& | int& | ||
int&& z = std::move(x); |
T is | int | int | int | int& |
decltype(val) is | int | int& | const int& | int& | |
decltype((val)) is | int& | int& | const int& | int& | |
int x; |
T is | int | int | int | ⛔ |
decltype(val) is | int | int& | const int& | ||
decltype((val)) is | int& | int& | const int& | ||
const int y; |
T is | int | ⛔ | int | ⛔ |
decltype(val) is | int | const int& | |||
decltype((val)) is | int& | const int& | |||
func<int>(5); |
T is | int | ⛔ | int | int |
decltype(val) is | int | const int& | int&& | ||
decltype((val)) is | int& | const int& | int& | ||
int x; |
T is | int& | int& | int& | int& |
decltype(val) is | int& | int& | int& | int& | |
decltype((val)) is | int& | int& | int& | int& | |
const int y; |
T is | ⛔ | ⛔ | ⛔ | ⛔ |
decltype(val) is | |||||
decltype((val)) is | |||||
func<int&>(5); |
T is | ⛔ | ⛔ | ⛔ | ⛔ |
decltype(val) is | |||||
decltype((val)) is | |||||
int x; |
T is | ⛔ | int&& | int&& | ⛔ |
decltype(val) is | int& | int& | |||
decltype((val)) is | int& | int& | |||
const int y; |
T is | ⛔ | ⛔ | ⛔ | ⛔ |
decltype(val) is | |||||
decltype((val)) is | |||||
func<int&&>(5); |
T is | int&& | ⛔ | ⛔ | int&& |
decltype(val) is | int&& | int&& | |||
decltype((val)) is | int& | int& | |||
int x; |
T is | const int | const int | const int | ⛔ |
decltype(val) is | const int | const int& | const int& | ||
decltype((val)) is | const int& | const int& | const int& | ||
const int y; |
T is | const int | const int | const int | ⛔ |
decltype(val) is | const int | const int& | const int& | ||
decltype((val)) is | const int& | const int& | const int& | ||
func<const int>(5); |
T is | const int | const int | const int | const int |
decltype(val) is | const int | const int& | const int& | const int&& | |
decltype((val)) is | const int& | const int& | const int& | const int& | |
int x; |
T is | const int& | const int& | const int& | const int& |
decltype(val) is | const int& | const int& | const int& | const int& | |
decltype((val)) is | const int& | const int& | const int& | const int& | |
const int y; |
T is | const int& | const int& | const int& | const int& |
decltype(val) is | const int& | const int& | const int& | const int& | |
decltype((val)) is | const int& | const int& | const int& | const int& | |
func<const int&>(5); |
T is | const int& | const int& | const int& | const int& |
decltype(val) is | const int& | const int& | const int& | const int& | |
decltype((val)) is | const int& | const int& | const int& | const int& | |
int x; |
T is | ⛔ | const int&& | const int&& | ⛔ |
decltype(val) is | const int& | const int& | |||
decltype((val)) is | const int& | const int& | |||
const int y; |
T is | ⛔ | const int&& | const int&& | ⛔ |
decltype(val) is | const int& | const int& | |||
decltype((val)) is | const int& | const int& | |||
func<const int&&>(5); |
T is | const int&& | const int&& | ⛔ | const int&& |
decltype(val) is | const int&& | const int& | const int&& | ||
decltype((val)) is | const int& | const int& | const int& |