나는 뭔가를 놓치고 있는지 잘 모르겠지만 아무것도 반환 할 수있는 사용자 정의 함수를 호출하는 사용자 정의 리터럴도 일종의 리터럴입니다.문자열이 아닌 리터럴은 prvalues입니까?
이 표준은, 그것이 문자열 리터럴이 아닌 리터럴이 prvalue는 항상 말한다 but : 입증한다 모두 GCC와 연타에
#include <iostream>
#include <typeinfo>
int& operator""_a(unsigned long long c);
int main()
{
std::cout << std::is_same<decltype(5_a), int&>::value;
}
인쇄 1, 리터럴 5_a
의 (a하지 않은 것을 문자열 리터럴) 대신 r- 수치의 좌변으로 처리되고 :
[expr.prim.literal]/1리터럴는 일차 식이다. 유형은 형식에 따라 다릅니다. 문자열 리터럴은 왼쪽 값입니다. 다른 모든 리터럴은 prvalues입니다.
사용자 정의 리터럴 literals too이다.
내가 무엇을 누락 했습니까?
[이 값 카테고리 참조] (http://en.cppreference.com/w/cpp/language/value_category)에 따르면 lvalues에는 "반환 값 유형이 lvalue reference 인 함수 호출 또는 오버로드 된 연산자 표현식"이 포함됩니다. 사용자 정의 리터럴이 실제로 무엇인지는 오버로드 된 연산자입니다 (예를 들어 '5_a'는 호출 연산자 '_a (5)'와 같습니다). 그리고 연산자 함수는 lvalue 참조를 반환합니다. lvalue 참조는 같은 유형의 lvalue 참조와 비교됩니다. –
@Someprogrammerdude하지만 리터럴이기도합니다. 게다가, 이탤릭체 *로 쓰여 있으며, 리터럴 * 구문 규칙에 따라 모든 생성자를 참조한다는 것을 강조하기 위해 표준에 모순이있을 수 없다고 말하고 싶습니다. –
@ Peregring-lk 표준은 인간이 작성한 문서입니다. 모순을 포함 할 수 없다는 것은 무엇을 의미합니까? 표준 정의를 사용해서는 안되지 만 어쨌든 그렇게하는 것은 아마도 그 중 하나 일 수 있습니다. –