/*=============================================================================
    Copyright (c) 2004 Joao Abecasis
    http://spirit.sourceforge.net/

    Use, modification and distribution is subject to the Boost Software
    License, Version 1.0. (See accompanying file LICENSE_1_0.txt or copy at
    http://www.boost.org/LICENSE_1_0.txt)
=============================================================================*/

#include <boost/spirit/include/classic_scanner.hpp>
#include <boost/spirit/home/classic/symbols/impl/tst.ipp>
#include <boost/utility/addressof.hpp>

typedef char char_type;
typedef char const * iterator;

char_type data_[] = "whatever";

iterator begin = data_;
iterator end = data_
    + sizeof(data_)/sizeof(char_type); // Yes, this is an intencional bug ;)

int main()
{
    typedef BOOST_SPIRIT_CLASSIC_NS::scanner<> scanner;
    typedef BOOST_SPIRIT_CLASSIC_NS::impl::tst<void *, char_type> symbols;

    symbols symbols_;

    symbols_.add(begin, end - 1, (void*) boost::addressof(symbols_));

    // The symbol table parser should not choke on input containing the null
    // character.
    symbols_.find(scanner(begin, end));
}
