Hello:

Given that the following two examples compile without any errors:
Code:
class Tester
{
    bool FunctionA(int) { return true; }
    bool FunctionA(int, int, int) { return true; }
    bool FunctionB(int) { return true; }
    bool FunctionB(int, int, int) { return true; }
 
    void Member(void)
    {
        int static const iVariationA = 0;
        int static const iVariationB = 1;
        int static const nVariations = 2;
 
        for (int i = 0; i < nVariations; ++i)
        {
            bool (Tester::* const pfn)(int) = &Tester::FunctionA;
        }
    }
};
void main(void)
{
    Tester tester;
}
Code:
class Tester
{
    bool FunctionA(int) { return true; }
    bool FunctionA(int, int, int) { return true; }
    bool FunctionB(int) { return true; }
    bool FunctionB(int, int, int) { return true; }
 
    void Member(void)
    {
        int static const iVariationA = 0;
        int static const iVariationB = 1;
        int static const nVariations = 2;
 
        bool (Tester::* static const pfnVariations[nVariations])(int)
            = { &Tester::FunctionA, &Tester::FunctionB };
 
        for (int i = 0; i < nVariations; ++i)
        {
            bool (Tester::* const pfn)(int) = pfnVariations[i];
        }
    }
};
void main(void)
{
    Tester tester;
}
Does anyone know why this (which I would prefer instead of the workaround in the last example) won't compile?:

Code:
class Tester
{
    bool FunctionA(int          ) { return true; }
    bool FunctionA(int, int, int) { return true; }
    bool FunctionB(int          ) { return true; }
    bool FunctionB(int, int, int) { return true; }
 
    void Member(void)
    {
        int static const iVariationA = 0;
        int static const iVariationB = 1;
        int static const nVariations = 2;
 
        for (int i = 0; i < nVariations; ++i)
        {
            bool (Tester::* const pfn)(int) = ((i == iVariationA) ? (&Tester::FunctionA)
                                                                  : (&Tester::FunctionB));
        }
    }
};
void main(void)
{
    Tester tester;
}
1>test.cpp(124) : error C2568: ':' : unable to resolve function overload
1> test.cpp(111): could be 'bool Tester::FunctionA(int,int,int)'
1> test.cpp(110): or 'bool Tester::FunctionA(int)'
Thanks