[cfe-users] inconsistent compilation error inside constexpr if

2020-08-21 Thread Manu agarwal via cfe-users
Hello,

In the below code the compiler throws "undeclared identifier" when the 
commented line is uncommented. Whereas the line just before compiles fine.

Regards,
Manu

typedef bool (* DummyFunc)   ();


bool ExecDummy (DummyFunc fptr) {

if (fptr)
return fptr ();

return false;
}

constexpr unsigned int IsMyAppClient = 0;

constexpr bool CheckForTypeClient (unsigned int pAppType)
{
return ((pAppType & IsMyAppClient) != 0);
}


class  MyAppTemplate
{
public:
template 
staticboolMyAppInit ();
};

template 
bool
MyAppTemplate::MyAppInit ()
{
if constexpr (CheckForTypeClient(T)) {

return ClientMain ();// no error
//return ExecDummy(ClientMain);// error: use of undeclared 
identifier 'ClientMain'
}

return false;
}

int __cdecl
main (int pArgc, char* pArgv[])
{
constexpr int TVal = 3;

MyAppTemplate::MyAppInit ();

return 0;
}


___
cfe-users mailing list
cfe-users@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users


Re: [cfe-users] inconsistent compilation error inside constexpr if

2020-08-21 Thread David Blaikie via cfe-users
From what I could test on godbolt, using LLVM evrsions back to 5.0,
Clang does reject the "return ClientMain();" call you aren't seeing an
error on. So I'm not sure what compiler/version/situation you're
running, but at least at first blush it doesn't look like clang.

On Fri, Aug 21, 2020 at 1:29 PM Manu agarwal via cfe-users
 wrote:
>
> Hello,
>
> In the below code the compiler throws "undeclared identifier" when the 
> commented line is uncommented. Whereas the line just before compiles fine.
>
> Regards,
> Manu
>
> typedef bool (* DummyFunc)   ();
>
>
> bool ExecDummy (DummyFunc fptr) {
>
> if (fptr)
> return fptr ();
>
> return false;
> }
>
> constexpr unsigned int IsMyAppClient = 0;
>
> constexpr bool CheckForTypeClient (unsigned int pAppType)
> {
> return ((pAppType & IsMyAppClient) != 0);
> }
>
>
> class  MyAppTemplate
> {
> public:
> template 
> staticboolMyAppInit ();
> };
>
> template 
> bool
> MyAppTemplate::MyAppInit ()
> {
> if constexpr (CheckForTypeClient(T)) {
>
> return ClientMain ();// no error
> //return ExecDummy(ClientMain);// error: use of 
> undeclared identifier 'ClientMain'
> }
>
> return false;
> }
>
> int __cdecl
> main (int pArgc, char* pArgv[])
> {
> constexpr int TVal = 3;
>
> MyAppTemplate::MyAppInit ();
>
> return 0;
> }
>
>
> ___
> cfe-users mailing list
> cfe-users@lists.llvm.org
> https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users
___
cfe-users mailing list
cfe-users@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-users