﻿id	summary	reporter	owner	description	type	status	priority	component	version	resolution	keywords	cc
230	Deleted declaration (=void) is available via assertion	mlbrooks		"{{{
// Our Rule:  Anything except float can say hi

forall( dtype T )
void sayHi( T & o ) {
    printf(""Object at %p is saying hi\n"", & o);
}

void sayHi( float & ) = void;

// Test 1 (correct today): A direct call to sayHi respects the rule stated above

void test1() {
    int i;
    printf(""Object at %p is an int\n"", & i);
    sayHi(i);

    float f;
    printf(""Object at %p is a float\n"", & f);
  #ifdef TRY_FORBIDDEN
    sayHi(f);
  #endif
}

// Test2 (incorrect today): An assertion-mediated call to sayHi disregards the rule stated above

trait can_speak( dtype T ) {
    void sayHi( T & );
};

forall( dtype T | can_speak(T) )
void forceSpeak( T & o ) {
    sayHi( o );
}

void test2() {
    int i;
    printf(""Object at %p is an int\n"", & i);
    forceSpeak(i);

    float f;
    printf(""Object at %p is a float\n"", & f);
    forceSpeak(f);
}

// Top-level driver

int main() {
    test1();
    printf(""-----\n"");
    test2();
}
}}}

-DTRY_FORBIDDEN actual and expected: compiler error, Unique best alternative includes deleted identifier at sayHi(f) call in test1

plain Actual: compiles successfully and runs with output
{{{
Object at 0x7fffffffe2f0 is an int
Object at 0x7fffffffe2f0 is saying hi
Object at 0x7fffffffe2f4 is a float
-----
Object at 0x7fffffffe2b8 is an int
Object at 0x7fffffffe2b8 is saying hi
Object at 0x7fffffffe2bc is a float
Object at 0x7fffffffe2bc is saying hi
}}}
plain Expected: compiler error, Unique best alternative includes deleted identifier at forceSpeak(f) call in test2


"	defect	closed	minor	cfa-cc	1.0	fixed		
