Table-Driven Finite State Machine
I see a number of things that may help you improve your code.

Don't use leading underscores in names

Anything with a leading underscore is a reserved name in C++ (and in C).  See this question for details.

Don't use void main()

The only function signatures allowed by the C++ standard both require an int return type. See this question for details.

Don't abuse using namespace std

Putting using namespace std at the top of every program is a bad habit that you'd do well to avoid.  This sample doesn't explicitly have that, but it's implied by the way the usage code is written.

Fix the bug

Right now, the way the arrays are constructed and the way that they're used are reversed.  Try implementing a state machine in which the number of states does not equal the number of events and you'll quickly see what I mean.

Rethink the interface

Right now, there is very little benefit in using the FSM class.  All of the actual code to implement the finite state machine is done with freestanding functions rather than member functions and requires a pair of enum classes that each must have _ as the last named item.  Further, the event that caused the transition isn't passed to the function -- it's implicit.  All of this makes for a fragile design.  Take the classic example of a vending machine that dispenses items for fifteen cents and that accepts only nickels (5 cents) and dimes (10 cents).  We'd have something like this:

enum class State : char { Empty, Five, Ten, _ };
enum class Event : char { Nickel, Dime,   _ };

// Then the state machine
auto fsm = FSM&lt; State, Event &gt;(State::Empty, {{
    // Nickel       Dime
    { zeroToFive,  zeroToTen },    // Empty
    { fiveToTen,   fiveToFifteen},  // Five
    { tenToFifteen, tenToTwenty}   // Ten
}});


Now we still have to write six standalone functions to implement this!  That's not very convenient.  Worse, the argument each function gets isn't even used, so each function looks something like this:

State fiveToFifteen(State ) {
  std::cout &lt;&lt; "got a dime, now have 15 cents\nHere's your item!\n";
  return State::Empty;
}