View Issue Details

IDProjectCategoryView StatusLast Update
0005132NoesisGUIUnrealpublic2026-07-20 18:07
ReporterJinFox Assigned Tojsantos  
PrioritynormalSeveritymajor 
Status assignedResolutionopen 
Product VersionStudio_Beta 
Summary0005132: [Unreal] Noesis Math.h global E constant collides with Unreal static Method in ShaderPermutation.h using Unity build
Description

Hello,

Our project compiles with the C4459-as-error flag which prevents global scope symbols to be hidden.

It seems that there is a conflict due to the E constant declared in Math.h.
constexpr float E = 2.71828182845904523536028747135266249775724709369996f;

This is triggering an error with Unreal file ShaderPermutation.h as several static method are using E as parameter name in this file (such as static int32 ToDefineValue(Type E)).

A simple solution that I have implemented locally is to rename that constant to something more specific to prevent the conflict from happening by changing it by this line :
constexpr float EulerE = 2.71828182845904523536028747135266249775724709369996f;

Would that be something you would be willing to change in your source or should I keep my source change?
Thank you

PlatformAny

Activities

JinFox

JinFox

2026-07-16 14:57

reporter   ~0012420

As a note, it seems to be a convergence of issue of using unreal's Unity builds and this flag of warning as error. it's not just the E symbol causing the issue by itself

jsantos

jsantos

2026-07-17 11:03

manager   ~0012423

Interesting because this is not a global symbol, it is in the Noesis namespace.

Could you please paste the exact error you are getting and the unreal version?

JinFox

JinFox

2026-07-17 13:30

reporter   ~0012425

Last edited: 2026-07-20 18:07

Hey Jesus, It is actually not really on Noesis, indeed it is not a global symbol but if you enable unity build system in the unreal project it tries to optimise some of the headers and then it creates conflicts where in "standard" compilation it wouldn't.

The actual fix I did locally was to manually disable Unity build in the plugin :

public class NoesisRuntime : ModuleRules
{
    public NoesisRuntime(ReadOnlyTargetRules Target) : base(Target)
    {
        bUseUnity = false;
         //...

Changing of the name to EulerE does work but it's addressing the symptom more than the root cause.
Unreal version is 5.7.4-1277853

The error looked like this but was flaring a bit randomly (sometime on this Noesis::E sometime on Noesis::Point and rive::Point, basically any symbol that have the same signature without the namespace .

0> ShaderPermutation.h(103,39): Error C2220 : the following warning is treated as an error
0>  static int32 ToDimensionValueId(Type E)
0>                                       ^
0>ShaderPermutation.h(103,39): Warning C4459 : declaration of 'E' hides global declaration
0>Math.h(38,17): Reference  : see declaration of 'Noesis::E'
0>constexpr float E = 2.71828182845904523536028747135266249775724709369996f;
0>                ^
0> ...

Issue History

Date Modified Username Field Change
2026-07-16 13:43 JinFox New Issue
2026-07-16 14:57 JinFox Note Added: 0012420
2026-07-16 16:43 JinFox Summary Noesis Math.h global E constant collides with Unreal static Method in ShaderPermutation.h => [Unreal] Noesis Math.h global E constant collides with Unreal static Method in ShaderPermutation.h using Unity build
2026-07-17 11:01 jsantos Assigned To => jsantos
2026-07-17 11:01 jsantos Status new => assigned
2026-07-17 11:03 jsantos Note Added: 0012423
2026-07-17 11:03 jsantos Status assigned => feedback
2026-07-17 13:30 JinFox Note Added: 0012425
2026-07-17 13:30 JinFox Status feedback => assigned
2026-07-17 13:30 JinFox Note Edited: 0012425
2026-07-20 18:07 jsantos Note Edited: 0012425
2026-07-20 18:07 jsantos Note Edited: 0012425