Skip to content

Commit a24978c

Browse files
authored
fix(parser): Initial support for the decltype specifier
1 parent f80aa30 commit a24978c

File tree

2 files changed

+22
-0
lines changed

2 files changed

+22
-0
lines changed

src/cxx/semantics.cc

+1
Original file line numberDiff line numberDiff line change
@@ -1315,6 +1315,7 @@ void Semantics::visit(DecltypeAutoSpecifierAST* ast) {
13151315
void Semantics::visit(DecltypeSpecifierAST* ast) {
13161316
ExpressionSem expression;
13171317
this->expression(ast->expression, &expression);
1318+
specifiers_->type.mergeWith(expression.type);
13181319
}
13191320

13201321
void Semantics::visit(TypeofSpecifierAST* ast) {

tests/unit_tests/parser/is_same_as.001.cc

+21
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,24 @@ static_assert(__is_same_as(const int, volatile int)); // expected-error{{static_
3838
static_assert(__is_same_as(volatile int, volatile int)); // expected-error{{static_assert failed}}
3939

4040
static_assert(__is_same_as(const volatile int, volatile const int));
41+
42+
struct vec2i {
43+
int x;
44+
int y;
45+
};
46+
47+
struct string {
48+
const char* c_str();
49+
};
50+
51+
void test_1() {
52+
vec2i v;
53+
static_assert(__is_same_as(decltype(v), vec2i));
54+
static_assert(__is_same_as(decltype(v.x), int));
55+
static_assert(__is_same_as(decltype(v.x), unsigned int)); // expected-error{{static_assert failed}}
56+
static_assert(__is_same_as(decltype(v.y), int));
57+
58+
string str;
59+
static_assert(__is_same_as(decltype(str.c_str()), const char*));
60+
static_assert(__is_same_as(decltype(str.c_str()), char*)); // expected-error{{static_assert failed}}
61+
}

0 commit comments

Comments
 (0)