digitalmars.D.bugs - [Issue 1511] New: static assert doesn't fail as expected
- d-bugmail puremagic.com (49/49) Sep 17 2007 http://d.puremagic.com/issues/show_bug.cgi?id=1511
- d-bugmail puremagic.com (8/8) Sep 17 2007 http://d.puremagic.com/issues/show_bug.cgi?id=1511
- d-bugmail puremagic.com (6/6) Sep 17 2007 http://d.puremagic.com/issues/show_bug.cgi?id=1511
- BCS (2/10) Sep 17 2007 what is (char[] + char[]) ?
- Downs (14/28) Sep 17 2007 -----BEGIN PGP SIGNED MESSAGE-----
- d-bugmail puremagic.com (11/11) Sep 17 2007 http://d.puremagic.com/issues/show_bug.cgi?id=1511
- d-bugmail puremagic.com (10/10) Sep 18 2007 http://d.puremagic.com/issues/show_bug.cgi?id=1511
- d-bugmail puremagic.com (16/21) Oct 21 2007 http://d.puremagic.com/issues/show_bug.cgi?id=1511
http://d.puremagic.com/issues/show_bug.cgi?id=1511
Summary: static assert doesn't fail as expected
Product: D
Version: 1.014
Platform: PC
OS/Version: Windows
Status: NEW
Severity: normal
Priority: P2
Component: DMD
AssignedTo: bugzilla digitalmars.com
ReportedBy: davidl 126.com
import std.stdio;
template k(T)
{
static char[] conceptcheck1(){
T a, b;
static assert(is(typeof(a+b)));
return "";
}
void func(T t)
in
{
static assert(conceptcheck1()=="");
}
body
{
writefln(t);
}
void func1(T t)
in
{
static assert(conceptcheck1()=="");
}
body
{
writefln(t);
}
}
void main()
{
mixin k!(char[]); // this instantiation should make the conceptcheck1
fail
// mixin k!(float);
func("");
// mixin k!(float);
// mixin k!(char[]);
}
--
Sep 17 2007
http://d.puremagic.com/issues/show_bug.cgi?id=1511
a simplified case is
void main()
{
static assert(is(typeof(""+"3"))); // it doesn't fail
}
--
Sep 17 2007
http://d.puremagic.com/issues/show_bug.cgi?id=1511 is(T) is true as long as T is a type. typeof() will return the type of any valid expression. In your examples, all the expressions are valid. So, um.. there's no bug here. --
Sep 17 2007
Reply to d-bugmail puremagic.com,http://d.puremagic.com/issues/show_bug.cgi?id=1511 is(T) is true as long as T is a type. typeof() will return the type of any valid expression. In your examples, all the expressions are valid. So, um.. there's no bug here.what is (char[] + char[]) ?
Sep 17 2007
-----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 BCS wrote:Reply to d-bugmail puremagic.com,char[]. In theory, that's an array operation of addition of chars, but that's not implemented yet. It does have a type though. -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.7 (GNU/Linux) Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org iD8DBQFG72AVpEPJRr05fBERAqJBAJ9cCYVsk/ON2wo70ESoT0rLHxS+igCeNo8+ BiDCgrrRaE7/KuYC00dGlFU= =PHOR -----END PGP SIGNATURE-----http://d.puremagic.com/issues/show_bug.cgi?id=1511 is(T) is true as long as T is a type. typeof() will return the type of any valid expression. In your examples, all the expressions are valid. So, um.. there's no bug here.what is (char[] + char[]) ?
Sep 17 2007
http://d.puremagic.com/issues/show_bug.cgi?id=1511
Hrm.. this one might need some language lawyering to get an official answer.
In my original assessment, I mentally substituted array concatenation when I
saw the '+' but that was wrong.
Without the static assert part, which is largely if not completely irrelevant:
typeof("a" + "b") ==> illegal
is(typeof("a" + "b")) ==> 1
So, the question is, should is() actually return true for an illegal typeof()?
I suspect a missing layer of semantic analysis, but I'm not sure.
--
Sep 17 2007
http://d.puremagic.com/issues/show_bug.cgi?id=1511
typeof ("a"+"b") is actually evaluated to char[0]
typeof ("a"+"b") f;
static assert(is(f==char[0]); // this passes
but in my opinion, since this operator is not implemented, the compiler should
give me fail message
typeof(1~3) b; // this always fails, cause no ~ operator for int, int
implemented
--
Sep 18 2007
http://d.puremagic.com/issues/show_bug.cgi?id=1511
smjg iname.com changed:
What |Removed |Added
----------------------------------------------------------------------------
CC| |smjg iname.com
Keywords| |accepts-invalid
Summary|static assert doesn't fail |Expression T[] + T[] passes
|as expected |as having a type
what is (char[] + char[]) ?
char[].
In theory, that's an array operation of addition of chars, but that's
not implemented yet.
It isn't not implemented yet, it's not in the language. So the static assert
should definitely fail.
Even if it were "not implemented" as part of the compiler being under
construction, I wouldn't call this behaviour correct.
The bug also bites for other array types, as long as they're both the same.
--
Oct 21 2007









d-bugmail puremagic.com 