Итак, простой вопрос на самом деле, проиллюстрированный на примере ниже. Когда вы компилируете это, компилятор соответствующим образом (?) Выдает предупреждение (что мы сравниваем barfoo<int>::bar
с barfoo<foo>::bar
), теперь, учитывая, что bar
является перечислением - могу ли я безопасно проигнорировать это предупреждение?
#include <iostream>
using namespace std;
struct foo
{
};
template <typename bob = int>
struct barfoo
{
enum bar { ONE, TWO, THREE };
bar action() const { return TWO; }
};
template <barfoo<>::bar eAction = barfoo<>::ONE>
struct IsAction
{
template <typename bf>
static bool check(bf const& cState)
{
return cState.action() == eAction;
}
};
int main(void)
{
barfoo<foo> c;
cout << IsAction<>::check(c) << endl;
return 0;
}
Учитывая, что я сторонник удаления предупреждающих сообщений, есть ли способ удовлетворить компилятор , не перемещая перечисление за пределы ?