/******************************************************************************
Online C++ Compiler.
Code, Compile, Run and Debug C++ program online.
Write your code in this editor and press "Run" button to compile and execute it.
*******************************************************************************/
#include <iostream>
#include <type_traits>
/// Check if service supports config storage
template <typename Service>
std::true_type supportsConfigStorage_(decltype(&Service::setConfigStorage));
template <typename Service>
std::false_type supportsConfigStorage_(...);
template <typename Service>
constexpr bool supportsConfigStorage = decltype(supportsConfigStorage_<Service>(nullptr))::value;
class Checker;
struct Foo {
void setConfigStorage() {}
};
struct Bar {
private:
friend class Checker;
void setConfigStorage() {}
};
struct Checker
{
template<typename T>
void print()
{
if constexpr (supportsConfigStorage<T>)
{
std::cout<<"Has states storage" << std::endl;
}
else
{
std::cout<<"Has NO states storage" << std::endl;
}
}
};
int main()
{
Checker checker;
checker.print<Foo>();
checker.print<Bar>();
return 0;
}