mercredi 16 mai 2018

decltype for materialized prvalues member access behaves incorrectly

#include <iostream>
#include <type_traits>

struct A { double x; };
int main() 
{

    const A && a1 = A();

    std::cout << std::is_same_v<decltype((a1.x)), const double&>;
    std::cout << std::is_same_v<decltype((std::move(a1).x)), const double&&>;
    std::cout << std::is_same_v<decltype((A().x)), double>;

}

Shouldn't decltype in the last example return double&& since according to value categories. A().x is an xvalue

xvalue

a.m, the member of object expression, where a is an rvalue and m is a non-static data member of non-reference type;

...

Aucun commentaire:

Enregistrer un commentaire