www.digitalmars.com         C & C++   DMDScript  

digitalmars.D - The static function compilation environment is the host?

this code:
```d

/+ dub.sdl:
     buildOptions "betterC"
+/


static pl1()
{
	class tc1{

	}
	auto vtc1 = new tc1();
	
	return vtc1.mangleof;
}

enum vpl1 = {
	class tc1{

	}
	auto vtc1 = new tc1();
	
	return vtc1.mangleof;
};

pragma(msg,pl1);
pragma(msg,pl1());
pragma(msg,vpl1());


version(D_BetterC)
{
	pragma(msg,"is betterC");
	extern (C) int main(int argc, char** argv) {
		return 0;
	}
}else{
	pragma(msg,"not betterC");
	void main()
	{
	}
}

for ldc2

```
dub build --compiler=ldc2
Performing "debug" build using ldc2 for x86_64.
wasm-runtime ~master: building configuration "application"...
_D3app3pl1FZ4vtc1CQqQoFZ3tc1
_D3app3pl1FZ4vtc1CQqQoFZ3tc1
_D3app9__lambda5MFZ4vtc1CQxQvMFZ3tc1
is betterC
Linking...
test.obj : error LNK2019: unresolved external symbol 
_D3app3pl1FZ3tc17__ClassZ referenced in function 
_D3app3pl1FNaNbNfZAya
test.obj : error LNK2019: unresolved external symbol 
_d_allocclass referenced in function _D3app3pl1FNaNbNfZAya
test.obj : error LNK2001: unresolved external symbol 
_D6object6Object8toStringMFZAya
test.obj : error LNK2001: unresolved external symbol 
_D6object6Object6toHashMFNbNeZm
test.obj : error LNK2001: unresolved external symbol 
_D6object6Object5opCmpMFCQqZi
test.obj : error LNK2001: unresolved external symbol 
_D6object6Object8opEqualsMFCQtZb

```


Should the environment in which the Pl1 function is compiled be 
the host environment or the target environment?

The result is correct during compilation,

linker errors occur in betterc mode
I think static functions should use the host environment


Symbolic links should not be used after the results are obtained
Dec 30 2021