#include <iostream>
#include <type_traits>
class Foo
{
public:
template<typename DT, typename = std::enable_if_t<!std::is_pointer<std::decay_t<DT>>::value>>
Foo(const DT& newValue)
{
std::cout<<"In const DT& version"<<std::endl;
}
template<typename DT>
Foo(const DT* newValue)
{
std::cout<<"In const DT* version"<<std::endl;
}
};
int main()
{
int i=7;
Foo f1(i);
Foo f2(&i);
const int i_const = 7;
Foo f3(i_const);
Foo f4(&i_const);
int arr[5];
Foo f5(arr);
Foo f6(&arr);
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dHlwZV90cmFpdHM+CgpjbGFzcyBGb28KewogICAgcHVibGljOgogICAgdGVtcGxhdGU8dHlwZW5hbWUgRFQsIHR5cGVuYW1lID0gc3RkOjplbmFibGVfaWZfdDwhc3RkOjppc19wb2ludGVyPHN0ZDo6ZGVjYXlfdDxEVD4+Ojp2YWx1ZT4+ICAgCiAgICBGb28oY29uc3QgRFQmIG5ld1ZhbHVlKQogICAgewogICAgICAgIHN0ZDo6Y291dDw8IkluIGNvbnN0IERUJiB2ZXJzaW9uIjw8c3RkOjplbmRsOwogICAgfQoKICAgIHRlbXBsYXRlPHR5cGVuYW1lIERUPgogICAgRm9vKGNvbnN0IERUKiBuZXdWYWx1ZSkKICAgIHsKICAgICAgICBzdGQ6OmNvdXQ8PCJJbiBjb25zdCBEVCogdmVyc2lvbiI8PHN0ZDo6ZW5kbDsKICAgIH0KfTsKCmludCBtYWluKCkKewogICAgaW50IGk9NzsKICAgIAogICAgRm9vIGYxKGkpOyAKICAgIEZvbyBmMigmaSk7IAogICAgCiAgICBjb25zdCBpbnQgaV9jb25zdCA9IDc7CiAgICBGb28gZjMoaV9jb25zdCk7IAogICAgRm9vIGY0KCZpX2NvbnN0KTsKICAgIAogICAgaW50IGFycls1XTsKICAgIEZvbyBmNShhcnIpOwogICAgRm9vIGY2KCZhcnIpOwp9