This probably, is more of a design issue than a technical one.
But anyways, how can I access the instance of JolloManager data members inside it's nested struct? (Accesss deck?)
#include <array>
#include <iostream>
#include <numeric> //std::iota
#include <sstream>
template<std::size_t N>
class JolloManager
{
private:
    template<int ID, int c> struct PlayerCards
    {
        int id {ID};
        int cards[c] {0};
        friend std::istream& operator >> (std::istream& is, PlayerCards& p) {
            for(auto& i : p.cards) {
                is >> i;
                deck[i-1] = p.id; //error: invalid use of non-static data member 'JolloManager<N>::deck'
            }
            return is;
        }
    };
private:
    enum PlayerId { princeID = 100, princessID = 101 };
    PlayerCards<princeID,   2> prince;
    PlayerCards<princessID, 3> princess;
    std::array<int, N> deck;
public:
    JolloManager<N>() {
        std::iota(deck.begin(), deck.end(), 1);
    };
public:
    bool Read();
    int FinalCard();
};
template<std::size_t N>
bool JolloManager<N>::Read()
{
    static std::string line;
    std::getline(std::cin, line);
    std::istringstream issline(line);
    issline >> prince;
    issline >> princess;
    if(prince.cards[0] == 0) {
        return false;
    }
    return true;
}
int main()
{
    JolloManager<52> JManager;
    JManager.Read();
    return 0;
}
