Add hint when declaring function with TypeCtor

This commit is contained in:
Nick Treleaven 2023-11-08 13:27:10 +00:00 committed by The Dlang Bot
parent 76361f4c2b
commit bc214e44d5
2 changed files with 12 additions and 4 deletions

View file

@ -3385,9 +3385,13 @@ private extern(C++) final class DsymbolSemanticVisitor : Visitor
if (!tf.isNaked() && !(funcdecl.isThis() || funcdecl.isNested()))
{
OutBuffer buf;
MODtoBuffer(buf, tf.mod);
.error(funcdecl.loc, "%s `%s` without `this` cannot be `%s`", funcdecl.kind, funcdecl.toPrettyChars, buf.peekChars());
import core.bitop;
auto mods = MODtoChars(tf.mod);
.error(funcdecl.loc, "%s `%s` without `this` cannot be `%s`", funcdecl.kind, funcdecl.toPrettyChars, mods);
if (tf.next && tf.next.ty != Tvoid && popcnt(tf.mod) == 1)
.errorSupplemental(funcdecl.loc,
"did you mean to use `%s(%s)` as the return type?", mods, tf.next.toChars());
tf.mod = 0; // remove qualifiers
}

View file

@ -1,10 +1,14 @@
/*
TEST_OUTPUT:
---
fail_compilation/fail212.d(14): Error: function `fail212.S.bar` without `this` cannot be `const`
fail_compilation/fail212.d(10): Error: function `fail212.baz` without `this` cannot be `const`
fail_compilation/fail212.d(10): did you mean to use `const(int)` as the return type?
fail_compilation/fail212.d(18): Error: function `fail212.S.bar` without `this` cannot be `const`
---
*/
const int baz();
struct S
{
void foo() const