Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

auto and delctype(auto) type deduction example

Tags:

c++

auto

decltype

I read an article about auto type deduction with decltype and I am wondering if my logic is correct about how type is deduced in the example below (so if I am mistaken please correct me :)

#include <iostream>
using namespace std;

class Widget
{
public:
    Widget() = default;
};

int main()
{
    Widget w;
    const Widget& cw = w;          // cw is const Widget&
    auto myWidget1 = cw;           // (1) myWidget1  is Widget
    decltype(auto) myWidget2 = cw; // (2) myWidget2 is const Widget&
}

So far what I understood is that :

for 1 : the auto type deduction is used and in this case it is like temlpate type deduction for parms passed by value. Which means the cv-qualifiers and refs are ignored which will result in Widget as type in the end.

for 2: the decltype is used and then passed to auto what really is cw a const Widget& and then all are set and the type is const Widget&.

So is what I wrote/understood right or wrong ?

Thank you

like image 281
Blood-HaZaRd Avatar asked Sep 08 '26 07:09

Blood-HaZaRd


1 Answers

Here's a trick, so you can make the compiler to print a type:

template <typename>
struct TD;

Then use:

TD<decltype(myWidget1)>();

As TD<...> is an incomplete type, the compiler will complain, and will print your type in the error message:

error: invalid use of incomplete type struct TD<Widget>

So myWidget1's type is Widget.

Type of myWidget2:

error: invalid use of incomplete type struct TD<const Widget&>

So its type is indeed const Widget &, as you suspected.

So yes, what you've described is right.

like image 138
geza Avatar answered Sep 09 '26 20:09

geza



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!