https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103183

            Bug ID: 103183
           Summary: ind[arr] produces an lvalue when arr is an array
                    xvalue
           Product: gcc
           Version: 10.1.0
            Status: UNCONFIRMED
          Keywords: accepts-invalid, rejects-valid
          Severity: normal
          Priority: P3
         Component: c++
          Assignee: unassigned at gcc dot gnu.org
          Reporter: de34 at live dot cn
  Target Milestone: ---

With gcc 10 and later versions, the following program compiles in C++11/14
modes, but fails to compile in C++17 and later modes. It compiles in C++17 and
later modes if "int&&" is replaced with "int&" (which is wrong according to
[expr.sub]/2).

#include <type_traits>
#include <utility>

int main()
{
    int arr[]{0};
    static_assert(std::is_same<decltype(0[std::move(arr)]), int&&>::value, "");
}

It seems that arr[ind] doesn't suffer from this bug.

Gcc 9 correctly produced an xvalue in this case.

wandbox links (rejected valid code):
gcc 12.0 (-std=c++17): https://wandbox.org/permlink/HvNaq9T4J7oeYflt
gcc 12.0 (-std=c++14): https://wandbox.org/permlink/S3dhGvKr3aD5OeOW
gcc 10.1 (-std=c++17): https://wandbox.org/permlink/NzqYCtytSUW4oZjR
gcc 10.1 (-std=c++14): https://wandbox.org/permlink/LviIophRujplHx6o
gcc  9.3 (-std=c++17): https://wandbox.org/permlink/JkCQHBdc3xqDSG9s

wandbox links (accepted invalid code, with "int&&" replaced with "int&"):
gcc 12.0 (-std=c++17): https://wandbox.org/permlink/JkCQHBdc3xqDSG9s
gcc 10.1 (-std=c++17): https://wandbox.org/permlink/Yr3Vl2mbeDzGi02v

Reply via email to