Can someone explain to me why gcc outputs this error?
/media/projects/src/libs/GUIElements/include/GUIElements/TemplatedFlagManager.h:195:
error: ‘ClearQueue’ was not declared in this scope
ClearQueue<QueueType>();
^
/media/projects/src/libs/GUIElements/include/GUIElements/TemplatedFlagManager.h:35: error:
‘typename std::enable_if<(I < sizeof... (Tp)), void>::type for_each(std::tuple<_Args2 ...>&, FuncT)
[with long unsigned int I = 1ul; FuncT = FlagNotifier<Args>::AddSubscriber(QSharedPointer<FlagSubscriber>)
[with Args = {SystemFlags::EAppFlags, SystemFlags::EQueueFlags, SystemFlags::EMessageFlags}]::<lambda(auto:2)>;
Tp = {QList<SystemFlags::EAppFlags>, QList<SystemFlags::EQueueFlags>, QList<SystemFlags::EMessageFlags>};
typename std::enable_if<(I < sizeof... (Tp)), void>::type = void]’,
declared using local type ‘FlagNotifier<Args>::AddSubscriber(QSharedPointer<FlagSubscriber>)
[with Args = {SystemFlags::EAppFlags, SystemFlags::EQueueFlags, SystemFlags::EMessageFlags}]::<lambda(auto:2)>’,
is used but never defined [-fpermissive]
for_each(std::tuple<Tp...>& t, FuncT f)
^
in this code:
template <typename... Args>
class FlagNotifier
{
....
void AddSubscriber(QSharedPointer<FlagSubscriber> sub)
{
for_each(flagQueues, [&](auto queue){
using QueueType = typename decltype(queue)::value_type;
for(auto flag : queue)
{
auto& group = std::get<get_index<QueueType, Args...>::value>(flagGroups);
group[flag].push_back(sub);
}
ClearQueue<QueueType>();
sub->ApplyState();
});
}
template <typename T>
void ClearQueue(){
auto& flagQueue = std::get<get_index<T, Args...>::value>(this->flagQueues);
flagQueue.clear();
}
std::tuple<QList<Args>...> flagQueues;
std::tuple<QHash<Args, QList<QSharedPointer<FlagSubscriber>>>...> flagGroups;
}
msvc is perfectly fine with it. The "auto queue" is actually a member of tuple
std::tuple<QList<Args>...> flagQueues;
so the type should be easily deducible and yet this obscure warning...
P.S.
for_each is taken from this question: stackoverflow.com/a/6894436/1143162
get_index from this: stackoverflow.com/a/18063608/1143162