Coder Social home page Coder Social logo

eixx's People

Contributors

altren avatar erlanger avatar heri16 avatar matwey avatar saleyn avatar trin-cz avatar x0id avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

eixx's Issues

gcc 5: test_eterm failures

Hello, I am using g++ 5.2.1 on x86_64 and see the following:

> ./test_eterm 
Running 63 test cases...
test_eterm.cpp(351): fatal error: in "test_pid": critical check atom("abc@fc12") == et.node() has failed [abc@fc12 != abc@fc12]
test_eterm.cpp(413): fatal error: in "test_port": critical check atom("abc@fc12") == et.node() has failed [abc@fc12 != abc@fc12]
test_eterm.cpp(441): fatal error: in "test_ref": critical check atom("abc@fc12") == et.node() has failed [abc@fc12 != abc@fc12]
test_eterm_encode.cpp(162): fatal error: in "test_encode_pid": critical check eterm(pid) == t has failed [#Pid<[email protected]> != #Pid<[email protected]>]
test_eterm_encode.cpp(185): fatal error: in "test_encode_port": critical check t1 == t has failed [#Port<[email protected]> != #Port<[email protected]>]
test_eterm_encode.cpp(200): fatal error: in "test_encode_ref": critical check eterm(t1) == t has failed [#Ref<[email protected]> != #Ref<[email protected]>]
test_eterm_encode.cpp(256): fatal error: in "test_encode_trace": critical check self == t1.from() has failed
test_eterm_match.cpp(68): fatal error: in "test_match1": critical check res has failed
test_eterm_match.cpp(158): fatal error: in "test_match2": critical check m0 has failed
test_eterm_match.cpp(212): fatal error: in "test_match3": critical check atom("x12") == n->to_atom() has failed [x12 != x12]

static assertion failed: sizeof(eterm) == 2*sizeof(uint64_t)

Hello,

I am trying to compile eixx and see the following:

g++ -DHAVE_CONFIG_H -I. -I..  -g -O0 -I./../include -pthread -I/usr/include -I /usr/lib/erlang/lib/erl_interface-3.7.17/include   -MMD -Wall -Wno-unused-local-typedefs -fno-strict-aliasing -std=c++11 -DBOOST_SYSTEM_NO_DEPRECATED=1 -MT test_node-test_node.o -MD -MP -MF .deps/test_node-test_node.Tpo -c -o test_node-test_node.o `test -f 'test_node.cpp' || echo './'`test_node.cpp
In file included from /usr/include/boost/spirit/home/support/detail/endian/endian.hpp:45:0,
                 from /usr/include/boost/spirit/home/support/detail/endian.hpp:26,
                 from ./../include/eixx/marshal/endian.hpp:35,
                 from ./../include/eixx/marshal/atom.hpp:40,
                 from ./../include/eixx/marshal/eterm.hpp:45,
                 from ./../include/eixx/eterm.hpp:37,
                 from ./../include/eixx/eixx.hpp:65,
                 from test_node.cpp:2:
./../include/eixx/eterm.hpp:57:5: error: static assertion failed: sizeof(eterm) == 2*sizeof(uint64_t)
     BOOST_STATIC_ASSERT(sizeof(eterm)     == 2*sizeof(uint64_t));
     ^

I use gcc 4.8.3, and boost 1.58, my system arch is x86 (32-bit).

Will this project be updated?

This is a great project, but it's not being updated for compatibility with (currently) OTP 21/OTP 20. I have to downgrade my erlang version in order to use eixx, since my c++ node created using eixx doesn't accept UTF-8 atoms. There are probably other issues too, but this is the error I got running the example and so I stopped there. This is the best c++ to erlang connection tool I have found so far, and much better than the options on the official docs. I think it has a lot of potential if it is kept up-to-date, especially since newer companies like Discord are starting to use Erlang more. So this is simply a request that that happen. It would be nice.

Compile error

Hi. On Travis CI's architecture (Ubuntu 12 LTS I believe) I get

$ ./configure
checking for a BSD-compatible install... /usr/bin/install -c
checking whether build environment is sane... yes
checking for a thread-safe mkdir -p... /bin/mkdir -p
checking for gawk... gawk
checking whether make sets $(MAKE)... yes
./configure: line 3302: syntax error near unexpected token `noext,'
./configure: line 3302: `         AX_CXX_COMPILE_STDCXX_11(noext, optional)'

My .travis.yml file: https://github.com/fenollp/eixx/blob/6f22bbcee0ae0a2dcb591f0b00a2936ffda70a58/.travis.yml
Do I need to install something?

HAVE_EI_EPMD important?

What is HAVE_EI_EPMD used for? Is it important?

-- Found boost: /usr/local/Cellar/boost/1.76.0/lib
-- Looking for epmd/ei_epmd.h
-- Looking for epmd/ei_epmd.h - not found
-- Check alignment of uint64_t in cpp: 8
-- Could NOT find Doxygen (missing: DOXYGEN_EXECUTABLE) 

test_connect: SIGSEGM

When configured with --enable-optimizer on x86_64 platform

> gdb ./test_connect 
GNU gdb (GDB; devel:gcc) 7.8.1
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-suse-linux".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://bugs.opensuse.org/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...

warning: /etc/gdbinit.d/gdb-heap.py: Нет такого файла или каталога
Reading symbols from ./test_connect...done.
(gdb) run
Starting program: /home/matwey/lab/eixx/test/.libs/test_connect 
Missing separate debuginfos, use: zypper install glibc-debuginfo-2.19-16.15.1.x86_64
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib64/libthread_db.so.1".
Running 2 test cases...
[New Thread 0x7ffff54fd700 (LWP 14952)]
[New Thread 0x7ffff4cfc700 (LWP 14953)]
[New Thread 0x7ffff44fb700 (LWP 14954)]
[New Thread 0x7ffff3cfa700 (LWP 14955)]
[Thread 0x7ffff54fd700 (LWP 14952) exited]
[Thread 0x7ffff44fb700 (LWP 14954) exited]
[Thread 0x7ffff3cfa700 (LWP 14955) exited]
[Thread 0x7ffff4cfc700 (LWP 14953) exited]

Program received signal SIGSEGV, Segmentation fault.
0x000000000040d976 in operator() (v=<optimized out>, ec=..., __closure=0x419cd9) at test_async_queue.cpp:159
159             [&abort] (int& v, const boost::system::error_code& ec) { return !abort; },
Missing separate debuginfos, use: zypper install libgcc_s1-debuginfo-4.8.3+r212056-2.2.4.x86_64 libstdc++6-debuginfo-4.8.3+r212056-2.2.4.x86_64
(gdb) bt
#0  0x000000000040d976 in operator() (v=<optimized out>, ec=..., __closure=0x419cd9) at test_async_queue.cpp:159
#1  std::_Function_handler<bool(int&, const boost::system::error_code&), test_async_queue_concurrent::test_method()::__lambda9>::_M_invoke(const std::_Any_data &, int &, const boost::system::error_code &) (__functor=..., __args#0=@0x7fffffffd0e0: 4212224, __args#1=...)
    at /usr/include/c++/4.8/functional:2057
#2  0x0000000000418fc2 in eixx::util::async_queue<int, std::allocator<char> >::process_queue(std::function<bool (int&, boost::system::error_code const&)> const&, boost::system::error_code const&, std::chrono::duration<long, std::ratio<1l, 1000l> >, int) (this=0x62d780, h=..., ec=..., repeat=..., 
    repeat_count=2147483647) at ./../include/eixx/util/async_queue.hpp:109
#3  0x000000000041968d in operator() (repeat_count=<optimized out>, repeat=..., ec=..., h=..., this=<optimized out>)
    at ./../include/eixx/util/async_queue.hpp:132
#4  operator() (e=..., __closure=0x7fffffffd200) at ./../include/eixx/util/async_queue.hpp:222
#5  operator() (this=0x7fffffffd200) at /usr/include/boost/asio/detail/bind_handler.hpp:47
#6  asio_handler_invoke<boost::asio::detail::binder1<eixx::util::async_queue<T, Alloc>::async_dequeue(const async_handler&, std::chrono::milliseconds, int) [with T = int; Alloc = std::allocator<char>; eixx::util::async_queue<T, Alloc>::async_handler = std::function<bool(int&, const boost::system::error_code&)>; std::chrono::milliseconds = std::chrono::duration<long int, std::ratio<1l, 1000l> >]::__lambda3, boost::system::error_code> > (
    function=...) at /usr/include/boost/asio/handler_invoke_hook.hpp:69
#7  invoke<boost::asio::detail::binder1<eixx::util::async_queue<T, Alloc>::async_dequeue(const async_handler&, std::chrono::milliseconds, int) [with T = int; Alloc = std::allocator<char>; eixx::util::async_queue<T, Alloc>::async_handler = std::function<bool(int&, const boost::system::error_code&)>; std::chrono::milliseconds = std::chrono::duration<long int, std::ratio<1l, 1000l> >]::__lambda3, boost::system::error_code>, eixx::util::async_queue<T, Alloc>::async_dequeue(const async_handler&, std::chrono::milliseconds, int) [with T = int; Alloc = std::allocator<char>; eixx::util::async_queue<T, Alloc>::async_handler = std::function<bool(int&, const boost::system::error_code&)>; std::chrono::milliseconds = std::chrono::duration<long int, std::ratio<1l, 1000l> >]::__lambda3> (context=..., function=...) at /usr/include/boost/asio/detail/handler_invoke_helpers.hpp:37
#8  boost::asio::detail::wait_handler<eixx::util::async_queue<int, std::allocator<char> >::async_dequeue(std::function<bool (int&, boost::system::error_code const&)> const&, std::chrono::duration<long, std::ratio<1l, 1000l> >, int)::{lambda(boost::system::error_code const&)#2}>::do_complete(boost::asio::detail::task_io_service*, boost::asio::detail::task_io_service_operation*, boost::system::error_code const&, unsigned long) (
    owner=<optimized out>, base=<optimized out>) at /usr/include/boost/asio/detail/wait_handler.hpp:70
#9  0x0000000000413a60 in complete (bytes_transferred=<optimized out>, ec=..., owner=..., this=<optimized out>)
    at /usr/include/boost/asio/detail/task_io_service_operation.hpp:38
#10 do_run_one (ec=..., this_thread=..., lock=..., this=0x629b00) at /usr/include/boost/asio/detail/impl/task_io_service.ipp:372
#11 boost::asio::detail::task_io_service::run (this=0x629b00, ec=...) at /usr/include/boost/asio/detail/impl/task_io_service.ipp:149
#12 0x000000000040e4d4 in boost::asio::io_service::run (this=0x7fffffffd3c0) at /usr/include/boost/asio/impl/io_service.ipp:59
#13 0x000000000040f219 in test_async_queue_concurrent::test_method (this=this@entry=0x7fffffffd68f) at test_async_queue.cpp:174
#14 0x000000000040f59e in test_async_queue_concurrent_invoker () at test_async_queue.cpp:124
#15 0x00000000004109a7 in invoke<void (*)()> (this=<optimized out>, f=<optimized out>) at /usr/include/boost/test/utils/callback.hpp:56
#16 boost::unit_test::ut_detail::callback0_impl_t<boost::unit_test::ut_detail::unused, void (*)()>::invoke (this=<optimized out>)
    at /usr/include/boost/test/utils/callback.hpp:89
#17 0x00007ffff7781c71 in boost::unit_test::ut_detail::callback0_impl_t<int, boost::unit_test::(anonymous namespace)::zero_return_wrapper_t<boost::unit_test::callback0<boost::unit_test::ut_detail::unused> > >::invoke() () from /usr/lib64/libboost_unit_test_framework.so.1.58.0
---Type <return> to continue, or q <return> to quit---
#18 0x00007ffff776c8de in boost::execution_monitor::catch_signals(boost::unit_test::callback0<int> const&) ()
   from /usr/lib64/libboost_unit_test_framework.so.1.58.0
#19 0x00007ffff776d123 in boost::execution_monitor::execute(boost::unit_test::callback0<int> const&) ()
   from /usr/lib64/libboost_unit_test_framework.so.1.58.0
#20 0x00007ffff7781d72 in boost::unit_test::unit_test_monitor_t::execute_and_translate(boost::unit_test::test_case const&) ()
   from /usr/lib64/libboost_unit_test_framework.so.1.58.0
#21 0x00007ffff776f1d4 in boost::unit_test::framework_impl::visit(boost::unit_test::test_case const&) ()
   from /usr/lib64/libboost_unit_test_framework.so.1.58.0
#22 0x00007ffff779a833 in boost::unit_test::traverse_test_tree(boost::unit_test::test_suite const&, boost::unit_test::test_tree_visitor&) ()
   from /usr/lib64/libboost_unit_test_framework.so.1.58.0
#23 0x00007ffff776e09b in boost::unit_test::framework::run(unsigned long, bool) () from /usr/lib64/libboost_unit_test_framework.so.1.58.0
#24 0x00007ffff777f954 in boost::unit_test::unit_test_main(bool (*)(), int, char**) () from /usr/lib64/libboost_unit_test_framework.so.1.58.0
#25 0x00007ffff6738b05 in __libc_start_main () from /lib64/libc.so.6
#26 0x000000000040d8a4 in _start () at ../sysdeps/x86_64/start.S:122
(gdb) 

test_node doesn't connect to Erlang node

Hallo!
I try with your implementation of eixx library. When I start the Erlang node as well as the example program, all I get is:

$ erl -sname test -setcookie abc
Erlang R14B01 (erts-5.8.2) [source] [64-bit] [smp:2:2] [rq:2] [async-threads:0] [hipe] [kernel-poll:false]

Eshell V5.8.2 (abort with ^G)
(test@macbook)1>
=ERROR REPORT==== 13-Jan-2011::21:42:49 ===
** Connection attempt from disallowed node eixx@macbook **

and on the test_node side:
[macbook: src (dev)]$ ./test_node -n eixx@macbook -r test@macbook -c abc -v trace
Calling connection::connection(type=1)
-> sending epmd port req for 'test': <<0,5,122,116,101,115,116>>
<- response from epmd: 0 (ok)
<- epmd returned: port=51851,ntype=77,proto=0,dist_high=5,dist_low=5
<- Connected to node: test@macbook
-> sending name 21 bytes:<<0,19,110,0,5,0,0,9,156,101,105,120,120,64,109,97,99,98,111,111,107>>
<- got auth challenge (version=5, flags=32764, remote_challenge=1199743460)
-> sending challenge reply 23 bytes:<<0,21,114,188,139,248,119,217,82,143,132,169,139,199,177,186,112,38,51,27,135,227,176>>
Error reading auth challenge ack from node 'test@macbook': Possibly bad cookie?

This leaves me helpless. Both sides make use of the same cookie. Do you have an idea, why the authentication fails?
Regards,
Ralf

error: invalid use of non-static data member 'u'

I wrote a custom cmake for this project, but it errors on my Clang 3.4 compiler on OSX Mavericks.

eixx/src/../include/eixx/marshal/ref.hpp:199:84: error: invalid use of non-static data member 'u'
               ::memcmp(&m_blob->data()->u, &t.m_blob->data()->u, sizeof(ref_blob::u)) == 0;
                                                                         ~~~~~~~~~~^
eixx/src/../include/eixx/marshal/eterm.ipp:79:37: note: in instantiation of member function 'eixx::marshal::ref<std::__1::allocator<char> >::operator==' requested here
        case REF:    return vt.r    == rhs.vt.r;
                                    ^
eixx/src/../include/eixx/marshal/visit_match.hpp:65:23: note: in instantiation of member function 'eixx::marshal::eterm<std::__1::allocator<char> >::operator==' requested here
            return et == m_pattern;
                      ^
eixx/src/../include/eixx/marshal/visit.hpp:50:23: note: in instantiation of function template specialization 'eixx::marshal::visit_eterm_match<std::__1::allocator<char> >::operator()<long>' requested here
            : result( v(t1) )
                      ^
eixx/src/../include/eixx/marshal/eterm.hpp:570:33: note: in instantiation of function template specialization 'eixx::marshal::wrap<bool, eixx::marshal::visit_eterm_match<std::__1::allocator<char> > >::wrap<long>' requested here
            case LONG:   return wrapper(v, vt.i);
                                ^
eixx/src/../include/eixx/marshal/visit.hpp:66:19: note: in instantiation of function template specialization 'eixx::marshal::eterm<std::__1::allocator<char> >::visit<eixx::marshal::visit_eterm_match<std::__1::allocator<char> > >' requested here
        return et.visit(*static_cast<const Derived*>(this)).result;
                  ^
eixx/src/../include/eixx/marshal/eterm.ipp:263:22: note: in instantiation of function template specialization 'eixx::marshal::static_visitor<eixx::marshal::visit_eterm_match<std::__1::allocator<char> >, bool>::apply_visitor<std::__1::allocator<char> >' requested here
        if (!visitor.apply_visitor(*this))
                     ^
eixx/src/test_node.cpp:43:21: note: in instantiation of member function 'eixx::marshal::eterm<std::__1::allocator<char> >::match' requested here
    if (s_put_chars.match(a_msg->msg(), &l_binding))
                    ^
6 warnings and 2 errors generated.
make[2]: *** [src/CMakeFiles/test_node.dir/test_node.cpp.o] Error 1
make[1]: *** [src/CMakeFiles/test_node.dir/all] Error 2
make: *** [all] Error 2
16:34:33: The process "/usr/bin/make" exited with code 2.
Error while building/deploying project eixx (kit: Desktop Qt 5.2.1 clang 64bit)
When executing step "Make"
16:34:33: Elapsed time: 00:10.

Fails to compile on osx.

$ make
/Applications/Xcode.app/Contents/Developer/usr/bin/make  all-recursive
Making all in src
/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..     -g -O0 -I../include -pthread -I/usr/local/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/src -MMD -Wall -Wno-unused-local-typedefs -fno-strict-aliasing -std=c++11 -DBOOST_SYSTEM_NO_DEPRECATED=1 -MT libeixx_la-am.lo -MD -MP -MF .deps/libeixx_la-am.Tpo -c -o libeixx_la-am.lo `test -f 'am.cpp' || echo './'`am.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -g -O0 -I../include -pthread -I/usr/local/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/src -MMD -Wall -Wno-unused-local-typedefs -fno-strict-aliasing -std=c++11 -DBOOST_SYSTEM_NO_DEPRECATED=1 -MT libeixx_la-am.lo -MD -MP -MF .deps/libeixx_la-am.Tpo -c am.cpp  -fno-common -DPIC -o .libs/libeixx_la-am.o
clang: warning: argument unused during compilation: '-MMD'
warning: unknown warning option '-Wno-unused-local-typedefs'
      [-Wunknown-warning-option]
1 warning generated.
mv -f .deps/libeixx_la-am.Tpo .deps/libeixx_la-am.Plo
/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..     -g -O0 -I../include -pthread -I/usr/local/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/src -MMD -Wall -Wno-unused-local-typedefs -fno-strict-aliasing -std=c++11 -DBOOST_SYSTEM_NO_DEPRECATED=1 -MT libeixx_la-atom.lo -MD -MP -MF .deps/libeixx_la-atom.Tpo -c -o libeixx_la-atom.lo `test -f 'atom.cpp' || echo './'`atom.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -g -O0 -I../include -pthread -I/usr/local/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/src -MMD -Wall -Wno-unused-local-typedefs -fno-strict-aliasing -std=c++11 -DBOOST_SYSTEM_NO_DEPRECATED=1 -MT libeixx_la-atom.lo -MD -MP -MF .deps/libeixx_la-atom.Tpo -c atom.cpp  -fno-common -DPIC -o .libs/libeixx_la-atom.o
clang: warning: argument unused during compilation: '-MMD'
warning: unknown warning option '-Wno-unused-local-typedefs'
      [-Wunknown-warning-option]
In file included from atom.cpp:25:
In file included from ../include/eixx/marshal/eterm.hpp:51:
In file included from ../include/eixx/marshal/tuple.hpp:41:
../include/eixx/marshal/visit.hpp:41:31: warning: class template 'tuple' was
      previously declared as a struct template [-Wmismatched-tags]
    template <typename Alloc> class tuple;
                              ^
../include/eixx/marshal/defaults.hpp:44:42: note: previous use is here
        template <typename Alloc> struct tuple;
                                         ^
In file included from atom.cpp:25:
In file included from ../include/eixx/marshal/eterm.hpp:51:
In file included from ../include/eixx/marshal/tuple.hpp:41:
../include/eixx/marshal/visit.hpp:42:31: warning: class template 'list' was
      previously declared as a struct template [-Wmismatched-tags]
    template <typename Alloc> class list;
                              ^
../include/eixx/marshal/defaults.hpp:45:42: note: previous use is here
        template <typename Alloc> struct list;
                                         ^
In file included from atom.cpp:25:
In file included from ../include/eixx/marshal/eterm.hpp:51:
../include/eixx/marshal/tuple.hpp:48:27: warning: class template 'eterm' was
      previously declared as a struct template [-Wmismatched-tags]
template <typename Alloc> class eterm;
                          ^
../include/eixx/marshal/defaults.hpp:43:42: note: previous use is here
        template <typename Alloc> struct eterm;
                                         ^
In file included from atom.cpp:25:
In file included from ../include/eixx/marshal/eterm.hpp:51:
../include/eixx/marshal/tuple.hpp:51:1: warning: 'tuple' defined as a class
      template here but previously declared as a struct template
      [-Wmismatched-tags]
class tuple {
^
../include/eixx/marshal/defaults.hpp:44:35: note: did you mean class here?
        template <typename Alloc> struct tuple;
                                  ^~~~~~
                                  class
In file included from atom.cpp:25:
In file included from ../include/eixx/marshal/eterm.hpp:52:
../include/eixx/marshal/list.hpp:52:1: warning: 'list' defined as a class
      template here but previously declared as a struct template
      [-Wmismatched-tags]
class list : protected alloc_base<cons<Alloc>, Alloc> {
^
../include/eixx/marshal/defaults.hpp:45:35: note: did you mean class here?
        template <typename Alloc> struct list;
                                  ^~~~~~
                                  class
In file included from atom.cpp:25:
../include/eixx/marshal/eterm.hpp:132:1: warning: 'eterm' defined as a class
      template here but previously declared as a struct template
      [-Wmismatched-tags]
class eterm {
^
../include/eixx/marshal/defaults.hpp:43:35: note: did you mean class here?
        template <typename Alloc> struct eterm;
                                  ^~~~~~
                                  class
In file included from atom.cpp:25:
In file included from ../include/eixx/marshal/eterm.hpp:606:
In file included from ../include/eixx/marshal/eterm.ipp:39:
In file included from ../include/eixx/marshal/eterm_format.hpp:70:
../include/eixx/marshal/eterm_format.ipp:108:16: warning: 'static' function
      'pvariable' declared in header file should be declared 'static inline'
      [-Wunneeded-internal-declaration]
    static var pvariable(const char **fmt)
               ^
../include/eixx/marshal/eterm_format.ipp:148:17: warning: 'static' function
      'patom' declared in header file should be declared 'static inline'
      [-Wunneeded-internal-declaration]
    static atom patom(const char **fmt)
                ^
../include/eixx/marshal/eterm_format.ipp:161:17: warning: 'static' function
      'pquotedatom' declared in header file should be declared 'static inline'
      [-Wunneeded-internal-declaration]
    static atom pquotedatom(const char **fmt)
                ^
10 warnings generated.
mv -f .deps/libeixx_la-atom.Tpo .deps/libeixx_la-atom.Plo
/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..     -g -O0 -I../include -pthread -I/usr/local/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/src -MMD -Wall -Wno-unused-local-typedefs -fno-strict-aliasing -std=c++11 -DBOOST_SYSTEM_NO_DEPRECATED=1 -MT libeixx_la-defaults.lo -MD -MP -MF .deps/libeixx_la-defaults.Tpo -c -o libeixx_la-defaults.lo `test -f 'defaults.cpp' || echo './'`defaults.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -g -O0 -I../include -pthread -I/usr/local/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/src -MMD -Wall -Wno-unused-local-typedefs -fno-strict-aliasing -std=c++11 -DBOOST_SYSTEM_NO_DEPRECATED=1 -MT libeixx_la-defaults.lo -MD -MP -MF .deps/libeixx_la-defaults.Tpo -c defaults.cpp  -fno-common -DPIC -o .libs/libeixx_la-defaults.o
clang: warning: argument unused during compilation: '-MMD'
warning: unknown warning option '-Wno-unused-local-typedefs'
      [-Wunknown-warning-option]
1 warning generated.
mv -f .deps/libeixx_la-defaults.Tpo .deps/libeixx_la-defaults.Plo
/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..     -g -O0 -I../include -pthread -I/usr/local/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/src -MMD -Wall -Wno-unused-local-typedefs -fno-strict-aliasing -std=c++11 -DBOOST_SYSTEM_NO_DEPRECATED=1 -MT libeixx_la-ref.lo -MD -MP -MF .deps/libeixx_la-ref.Tpo -c -o libeixx_la-ref.lo `test -f 'ref.cpp' || echo './'`ref.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -g -O0 -I../include -pthread -I/usr/local/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/src -MMD -Wall -Wno-unused-local-typedefs -fno-strict-aliasing -std=c++11 -DBOOST_SYSTEM_NO_DEPRECATED=1 -MT libeixx_la-ref.lo -MD -MP -MF .deps/libeixx_la-ref.Tpo -c ref.cpp  -fno-common -DPIC -o .libs/libeixx_la-ref.o
clang: warning: argument unused during compilation: '-MMD'
warning: unknown warning option '-Wno-unused-local-typedefs'
      [-Wunknown-warning-option]
In file included from ref.cpp:25:
In file included from ../include/eixx/marshal/eterm.hpp:51:
In file included from ../include/eixx/marshal/tuple.hpp:41:
../include/eixx/marshal/visit.hpp:41:31: warning: class template 'tuple' was
      previously declared as a struct template [-Wmismatched-tags]
    template <typename Alloc> class tuple;
                              ^
../include/eixx/marshal/defaults.hpp:44:42: note: previous use is here
        template <typename Alloc> struct tuple;
                                         ^
In file included from ref.cpp:25:
In file included from ../include/eixx/marshal/eterm.hpp:51:
In file included from ../include/eixx/marshal/tuple.hpp:41:
../include/eixx/marshal/visit.hpp:42:31: warning: class template 'list' was
      previously declared as a struct template [-Wmismatched-tags]
    template <typename Alloc> class list;
                              ^
../include/eixx/marshal/defaults.hpp:45:42: note: previous use is here
        template <typename Alloc> struct list;
                                         ^
In file included from ref.cpp:25:
In file included from ../include/eixx/marshal/eterm.hpp:51:
../include/eixx/marshal/tuple.hpp:48:27: warning: class template 'eterm' was
      previously declared as a struct template [-Wmismatched-tags]
template <typename Alloc> class eterm;
                          ^
../include/eixx/marshal/defaults.hpp:43:42: note: previous use is here
        template <typename Alloc> struct eterm;
                                         ^
In file included from ref.cpp:25:
In file included from ../include/eixx/marshal/eterm.hpp:51:
../include/eixx/marshal/tuple.hpp:51:1: warning: 'tuple' defined as a class
      template here but previously declared as a struct template
      [-Wmismatched-tags]
class tuple {
^
../include/eixx/marshal/defaults.hpp:44:35: note: did you mean class here?
        template <typename Alloc> struct tuple;
                                  ^~~~~~
                                  class
In file included from ref.cpp:25:
In file included from ../include/eixx/marshal/eterm.hpp:52:
../include/eixx/marshal/list.hpp:52:1: warning: 'list' defined as a class
      template here but previously declared as a struct template
      [-Wmismatched-tags]
class list : protected alloc_base<cons<Alloc>, Alloc> {
^
../include/eixx/marshal/defaults.hpp:45:35: note: did you mean class here?
        template <typename Alloc> struct list;
                                  ^~~~~~
                                  class
In file included from ref.cpp:25:
../include/eixx/marshal/eterm.hpp:132:1: warning: 'eterm' defined as a class
      template here but previously declared as a struct template
      [-Wmismatched-tags]
class eterm {
^
../include/eixx/marshal/defaults.hpp:43:35: note: did you mean class here?
        template <typename Alloc> struct eterm;
                                  ^~~~~~
                                  class
In file included from ref.cpp:25:
In file included from ../include/eixx/marshal/eterm.hpp:606:
In file included from ../include/eixx/marshal/eterm.ipp:39:
In file included from ../include/eixx/marshal/eterm_format.hpp:70:
../include/eixx/marshal/eterm_format.ipp:108:16: warning: 'static' function
      'pvariable' declared in header file should be declared 'static inline'
      [-Wunneeded-internal-declaration]
    static var pvariable(const char **fmt)
               ^
../include/eixx/marshal/eterm_format.ipp:148:17: warning: 'static' function
      'patom' declared in header file should be declared 'static inline'
      [-Wunneeded-internal-declaration]
    static atom patom(const char **fmt)
                ^
../include/eixx/marshal/eterm_format.ipp:161:17: warning: 'static' function
      'pquotedatom' declared in header file should be declared 'static inline'
      [-Wunneeded-internal-declaration]
    static atom pquotedatom(const char **fmt)
                ^
10 warnings generated.
mv -f .deps/libeixx_la-ref.Tpo .deps/libeixx_la-ref.Plo
/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..     -g -O0 -I../include -pthread -I/usr/local/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/src -MMD -Wall -Wno-unused-local-typedefs -fno-strict-aliasing -std=c++11 -DBOOST_SYSTEM_NO_DEPRECATED=1 -MT libeixx_la-basic_otp_node_local.lo -MD -MP -MF .deps/libeixx_la-basic_otp_node_local.Tpo -c -o libeixx_la-basic_otp_node_local.lo `test -f 'basic_otp_node_local.cpp' || echo './'`basic_otp_node_local.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -g -O0 -I../include -pthread -I/usr/local/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/src -MMD -Wall -Wno-unused-local-typedefs -fno-strict-aliasing -std=c++11 -DBOOST_SYSTEM_NO_DEPRECATED=1 -MT libeixx_la-basic_otp_node_local.lo -MD -MP -MF .deps/libeixx_la-basic_otp_node_local.Tpo -c basic_otp_node_local.cpp  -fno-common -DPIC -o .libs/libeixx_la-basic_otp_node_local.o
clang: warning: argument unused during compilation: '-MMD'
warning: unknown warning option '-Wno-unused-local-typedefs'
      [-Wunknown-warning-option]
1 warning generated.
mv -f .deps/libeixx_la-basic_otp_node_local.Tpo .deps/libeixx_la-basic_otp_node_local.Plo
/bin/sh ../libtool  --tag=CXX   --mode=link g++  -g -O0 -I../include -pthread -I/usr/local/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/src -MMD -Wall -Wno-unused-local-typedefs -fno-strict-aliasing -std=c++11 -DBOOST_SYSTEM_NO_DEPRECATED=1  -L/usr/local/lib -lboost_system -o libeixx.la -rpath /Users/fire/Documents/eixx/install/lib libeixx_la-am.lo libeixx_la-atom.lo libeixx_la-defaults.lo libeixx_la-ref.lo libeixx_la-basic_otp_node_local.lo
libtool: link: g++ -dynamiclib -Wl,-undefined -Wl,dynamic_lookup -o .libs/libeixx.0.dylib  .libs/libeixx_la-am.o .libs/libeixx_la-atom.o .libs/libeixx_la-defaults.o .libs/libeixx_la-ref.o .libs/libeixx_la-basic_otp_node_local.o   -L/usr/local/lib -lboost_system  -O0 -pthread   -pthread -install_name  /Users/fire/Documents/eixx/install/lib/libeixx.0.dylib -compatibility_version 1 -current_version 1.0 -Wl,-single_module
clang: warning: argument unused during compilation: '-pthread'
clang: warning: argument unused during compilation: '-pthread'
libtool: link: (cd ".libs" && rm -f "libeixx.dylib" && ln -s "libeixx.0.dylib" "libeixx.dylib")
libtool: link: ( cd ".libs" && rm -f "libeixx.la" && ln -s "../libeixx.la" "libeixx.la" )
g++ -DHAVE_CONFIG_H -I. -I..  -g -O0 -I./../include -pthread -I/usr/local/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/src   -MMD -Wall -Wno-unused-local-typedefs -fno-strict-aliasing -std=c++11 -DBOOST_SYSTEM_NO_DEPRECATED=1 -MT test_node-test_node.o -MD -MP -MF .deps/test_node-test_node.Tpo -c -o test_node-test_node.o `test -f 'test_node.cpp' || echo './'`test_node.cpp
clang: warning: argument unused during compilation: '-MMD'
warning: unknown warning option '-Wno-unused-local-typedefs'
      [-Wunknown-warning-option]
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:65:
In file included from ./../include/eixx/eterm.hpp:37:
In file included from ./../include/eixx/marshal/eterm.hpp:51:
In file included from ./../include/eixx/marshal/tuple.hpp:41:
./../include/eixx/marshal/visit.hpp:41:31: warning: class template 'tuple' was
      previously declared as a struct template [-Wmismatched-tags]
    template <typename Alloc> class tuple;
                              ^
./../include/eixx/marshal/defaults.hpp:44:42: note: previous use is here
        template <typename Alloc> struct tuple;
                                         ^
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:65:
In file included from ./../include/eixx/eterm.hpp:37:
In file included from ./../include/eixx/marshal/eterm.hpp:51:
In file included from ./../include/eixx/marshal/tuple.hpp:41:
./../include/eixx/marshal/visit.hpp:42:31: warning: class template 'list' was
      previously declared as a struct template [-Wmismatched-tags]
    template <typename Alloc> class list;
                              ^
./../include/eixx/marshal/defaults.hpp:45:42: note: previous use is here
        template <typename Alloc> struct list;
                                         ^
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:65:
In file included from ./../include/eixx/eterm.hpp:37:
In file included from ./../include/eixx/marshal/eterm.hpp:51:
./../include/eixx/marshal/tuple.hpp:48:27: warning: class template 'eterm' was
      previously declared as a struct template [-Wmismatched-tags]
template <typename Alloc> class eterm;
                          ^
./../include/eixx/marshal/defaults.hpp:43:42: note: previous use is here
        template <typename Alloc> struct eterm;
                                         ^
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:65:
In file included from ./../include/eixx/eterm.hpp:37:
In file included from ./../include/eixx/marshal/eterm.hpp:51:
./../include/eixx/marshal/tuple.hpp:51:1: warning: 'tuple' defined as a class
      template here but previously declared as a struct template
      [-Wmismatched-tags]
class tuple {
^
./../include/eixx/marshal/defaults.hpp:44:35: note: did you mean class here?
        template <typename Alloc> struct tuple;
                                  ^~~~~~
                                  class
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:65:
In file included from ./../include/eixx/eterm.hpp:37:
In file included from ./../include/eixx/marshal/eterm.hpp:52:
./../include/eixx/marshal/list.hpp:52:1: warning: 'list' defined as a class
      template here but previously declared as a struct template
      [-Wmismatched-tags]
class list : protected alloc_base<cons<Alloc>, Alloc> {
^
./../include/eixx/marshal/defaults.hpp:45:35: note: did you mean class here?
        template <typename Alloc> struct list;
                                  ^~~~~~
                                  class
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:65:
In file included from ./../include/eixx/eterm.hpp:37:
./../include/eixx/marshal/eterm.hpp:132:1: warning: 'eterm' defined as a class
      template here but previously declared as a struct template
      [-Wmismatched-tags]
class eterm {
^
./../include/eixx/marshal/defaults.hpp:43:35: note: did you mean class here?
        template <typename Alloc> struct eterm;
                                  ^~~~~~
                                  class
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:66:
In file included from ./../include/eixx/connect.hpp:36:
./../include/eixx/connect/basic_otp_mailbox.hpp:105:45: warning: class template
      'async_queue' was previously declared as a struct template
      [-Wmismatched-tags]
    template<typename T, typename A> friend class util::async_queue;
                                            ^
./../include/eixx/util/async_queue.hpp:57:8: note: previous use is here
struct async_queue : std::enable_shared_from_this<async_queue<T, Alloc>>
       ^
./../include/eixx/connect/basic_otp_mailbox.hpp:105:45: note: did you mean
      struct here?
    template<typename T, typename A> friend class util::async_queue;
                                            ^~~~~
                                            struct
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:66:
In file included from ./../include/eixx/connect.hpp:36:
In file included from ./../include/eixx/connect/basic_otp_mailbox.hpp:353:
./../include/eixx/connect/basic_otp_mailbox.ipp:93:18: warning: unused variable
      'res' [-Wunused-variable]
            bool res;
                 ^
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:66:
In file included from ./../include/eixx/connect.hpp:37:
In file included from ./../include/eixx/connect/basic_otp_connection.hpp:40:
In file included from ./../include/eixx/connect/transport_otp_connection.hpp:349:
In file included from ./../include/eixx/connect/transport_otp_connection.ipp:34:
In file included from ./../include/eixx/connect/transport_otp_connection_tcp.hpp:209:
./../include/eixx/connect/transport_otp_connection_tcp.ipp:694:5: warning:
      'MD5' is deprecated: first deprecated in OS X 10.7
      [-Wdeprecated-declarations]
    MD5((unsigned char *) string, length, (unsigned char *) digest.c);
    ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/openssl/md5.h:116:16: note:
      'MD5' has been explicitly marked deprecated here
unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md) ...
               ^
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:66:
In file included from ./../include/eixx/connect.hpp:37:
In file included from ./../include/eixx/connect/basic_otp_connection.hpp:40:
In file included from ./../include/eixx/connect/transport_otp_connection.hpp:349:
In file included from ./../include/eixx/connect/transport_otp_connection.ipp:34:
In file included from ./../include/eixx/connect/transport_otp_connection_tcp.hpp:209:
./../include/eixx/connect/transport_otp_connection_tcp.ipp:706:5: warning:
      'MD5_Init' is deprecated: first deprecated in OS X 10.7
      [-Wdeprecated-declarations]
    MD5_Init(&c);
    ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/openssl/md5.h:113:5: note:
      'MD5_Init' has been explicitly marked deprecated here
int MD5_Init(MD5_CTX *c) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
    ^
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:66:
In file included from ./../include/eixx/connect.hpp:37:
In file included from ./../include/eixx/connect/basic_otp_connection.hpp:40:
In file included from ./../include/eixx/connect/transport_otp_connection.hpp:349:
In file included from ./../include/eixx/connect/transport_otp_connection.ipp:34:
In file included from ./../include/eixx/connect/transport_otp_connection_tcp.hpp:209:
./../include/eixx/connect/transport_otp_connection_tcp.ipp:707:5: warning:
      'MD5_Update' is deprecated: first deprecated in OS X 10.7
      [-Wdeprecated-declarations]
    MD5_Update(&c, (unsigned char *) cookie, (uint32_t) strlen(cookie));
    ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/openssl/md5.h:114:5: note:
      'MD5_Update' has been explicitly marked deprecated here
int MD5_Update(MD5_CTX *c, const void *data, size_t len) DEPRECATED_IN_M...
    ^
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:66:
In file included from ./../include/eixx/connect.hpp:37:
In file included from ./../include/eixx/connect/basic_otp_connection.hpp:40:
In file included from ./../include/eixx/connect/transport_otp_connection.hpp:349:
In file included from ./../include/eixx/connect/transport_otp_connection.ipp:34:
In file included from ./../include/eixx/connect/transport_otp_connection_tcp.hpp:209:
./../include/eixx/connect/transport_otp_connection_tcp.ipp:708:5: warning:
      'MD5_Update' is deprecated: first deprecated in OS X 10.7
      [-Wdeprecated-declarations]
    MD5_Update(&c, (unsigned char *) chbuf,  (uint32_t) strlen(chbuf));
    ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/openssl/md5.h:114:5: note:
      'MD5_Update' has been explicitly marked deprecated here
int MD5_Update(MD5_CTX *c, const void *data, size_t len) DEPRECATED_IN_M...
    ^
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:66:
In file included from ./../include/eixx/connect.hpp:37:
In file included from ./../include/eixx/connect/basic_otp_connection.hpp:40:
In file included from ./../include/eixx/connect/transport_otp_connection.hpp:349:
In file included from ./../include/eixx/connect/transport_otp_connection.ipp:34:
In file included from ./../include/eixx/connect/transport_otp_connection_tcp.hpp:209:
./../include/eixx/connect/transport_otp_connection_tcp.ipp:709:5: warning:
      'MD5_Final' is deprecated: first deprecated in OS X 10.7
      [-Wdeprecated-declarations]
    MD5_Final(digest, &c);
    ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/openssl/md5.h:115:5: note:
      'MD5_Final' has been explicitly marked deprecated here
int MD5_Final(unsigned char *md, MD5_CTX *c) DEPRECATED_IN_MAC_OS_X_VERS...
    ^
test_node.cpp:72:47: warning: format specifies type 'long' but the argument has
      type '__darwin_suseconds_t' (aka 'int') [-Wformat]
            tm.tm_hour, tm.tm_min, tm.tm_sec, tv.tv_usec);
                                              ^~~~~~~~~~
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:65:
In file included from ./../include/eixx/eterm.hpp:37:
In file included from ./../include/eixx/marshal/eterm.hpp:45:
In file included from ./../include/eixx/marshal/atom.hpp:37:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/vector:502:5: error:
      static_assert failed "Allocator::value_type must be same type as
      value_type"
    static_assert((is_same<typename allocator_type::value_type, value_type>::value),
    ^             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./../include/eixx/marshal/eterm_format.ipp:63:32: note: in instantiation of
      template class
      'std::__1::vector<eixx::marshal::eterm<std::__1::allocator<char> >,
      std::__1::allocator<char> >' requested here
        struct vector : public std::vector<eterm<Alloc>, Alloc> {
                               ^
./../include/eixx/marshal/eterm_format.ipp:350:23: note: in instantiation of
      template class
      'eixx::marshal::<anonymous>::vector<std::__1::allocator<char> >' requested
      here
        vector<Alloc> v(a_alloc);
                      ^
./../include/eixx/marshal/eterm.ipp:298:16: note: in instantiation of function
      template specialization 'eixx::marshal::eformat<std::__1::allocator<char>
      >' requested here
        return eformat<Alloc>(fmt, pap, a_alloc);
               ^
./../include/eixx/marshal/eterm.ipp:337:18: note: in instantiation of member
      function 'eixx::marshal::eterm<std::__1::allocator<char> >::format'
      requested here
    try { return format(Alloc(), &fmt, &ap); } catch (...) { va_end(ap)...
                 ^
test_node.cpp:38:45: note: in instantiation of member function
      'eixx::marshal::eterm<std::__1::allocator<char> >::format' requested here
    static const eterm s_put_chars = eterm::format("{io_request,_,_,{put...
                                            ^
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:65:
In file included from ./../include/eixx/eterm.hpp:37:
In file included from ./../include/eixx/marshal/eterm.hpp:50:
./../include/eixx/marshal/ref.hpp:199:84: error: invalid use of non-static data
      member 'u'
  ...::memcmp(&m_blob->data()->u, &t.m_blob->data()->u, sizeof(ref_blob::u)) ...
                                                               ~~~~~~~~~~^
./../include/eixx/marshal/eterm.ipp:79:37: note: in instantiation of member
      function 'eixx::marshal::ref<std::__1::allocator<char> >::operator=='
      requested here
        case REF:    return vt.r    == rhs.vt.r;
                                    ^
./../include/eixx/marshal/visit_match.hpp:65:23: note: in instantiation of
      member function 'eixx::marshal::eterm<std::__1::allocator<char>
      >::operator==' requested here
            return et == m_pattern;
                      ^
./../include/eixx/marshal/visit.hpp:50:23: note: in instantiation of function
      template specialization
      'eixx::marshal::visit_eterm_match<std::__1::allocator<char>
      >::operator()<long>' requested here
            : result( v(t1) )
                      ^
./../include/eixx/marshal/eterm.hpp:570:33: note: in instantiation of function
      template specialization 'eixx::marshal::wrap<bool,
      eixx::marshal::visit_eterm_match<std::__1::allocator<char> >
      >::wrap<long>' requested here
            case LONG:   return wrapper(v, vt.i);
                                ^
./../include/eixx/marshal/visit.hpp:66:19: note: in instantiation of function
      template specialization 'eixx::marshal::eterm<std::__1::allocator<char>
      >::visit<eixx::marshal::visit_eterm_match<std::__1::allocator<char> > >'
      requested here
        return et.visit(*static_cast<const Derived*>(this)).result;
                  ^
./../include/eixx/marshal/eterm.ipp:263:22: note: in instantiation of function
      template specialization
      'eixx::marshal::static_visitor<eixx::marshal::visit_eterm_match<std::__1::allocator<char>
      >, bool>::apply_visitor<std::__1::allocator<char> >' requested here
        if (!visitor.apply_visitor(*this))
                     ^
test_node.cpp:41:21: note: in instantiation of member function
      'eixx::marshal::eterm<std::__1::allocator<char> >::match' requested here
    if (s_put_chars.match(a_msg->msg(), &l_binding))
                    ^
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:65:
In file included from ./../include/eixx/eterm.hpp:37:
In file included from ./../include/eixx/marshal/eterm.hpp:52:
In file included from ./../include/eixx/marshal/list.hpp:356:
./../include/eixx/marshal/list.ipp:55:9: error: 'auto' deduced as 'const
      eixx::marshal::eterm<std::__1::allocator<char> > *' in declaration of 'p'
      and deduced as 'const eixx::marshal::eterm<std::__1::allocator<char> >' in
      declaration of 'end'
    for(auto p = items, *end = items+N; p != end; ++p, ++hd) {
        ^        ~~~~~         ~~~~~~~
./../include/eixx/marshal/list.hpp:146:27: note: in instantiation of member
      function 'eixx::marshal::list<std::__1::allocator<char> >::init' requested
      here
        : base_t(alloc) { init(items, a_size, alloc); }
                          ^
./../include/eixx/marshal/list.hpp:143:11: note: in instantiation of member
      function 'eixx::marshal::list<std::__1::allocator<char> >::list' requested
      here
        : list(items, N, alloc) {}
          ^
./../include/eixx/marshal/list.hpp:245:16: note: in instantiation of function
      template specialization 'eixx::marshal::list<std::__1::allocator<char>
      >::list<1>' requested here
        return list<Alloc>(l, a);
               ^
test_node.cpp:94:15: note: in instantiation of function template specialization
      'eixx::marshal::list<std::__1::allocator<char> >::make<const char *>'
      requested here
        list::make("This is a test string"), &g_io_server->self());
              ^
15 warnings and 3 errors generated.
make[2]: *** [test_node-test_node.o] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

Term Marshal: ATOM_UTF8_EXT and SMALL_ATOM_UTF8_EXT

Is there support for marshalling ATOM_UTF8_EXT and SMALL_ATOM_UTF8_EXT since ATOM_EXT and SMALL_ATOM_EXT has been officially DEPRECATED? (https://erlang.org/doc/apps/erts/erl_ext_dist.html#atom_utf8_ext)

Following my upgrade to OTP20, I began getting this error when attempting to connect.

Reproduce Steps

erl -sname abc &
./inst/test/test-node -n a@localhost -r [email protected]
** 'abc@localhost': Connection attempt from node a@localhost rejected since it cannot handle ["UTF8_ATOMS"].**

Environment

  • Erlang/OTP 22
  • GCC 10
  • Boost v1.65

Relates to CHANGELOG

From the OTP20 Release notes

In the OTP 20 release candidates the function erlang:term_to_binary/1 changed the encoding of all atoms from ATOM_EXT to ATOM_UTF8_EXT and SMALL_ATOM_UTF8_EXT. This is now changed so that only atoms actually containing unicode characters are encoded with the UTF8 tags while other atoms are encoded ATOM_EXT just as before.

and

Atoms can now contain arbitrary unicode characters which means that the DFLAG_UTF8_ATOMS capability in the distribution protocol must be supported if an OTP 20 node should accept the connection with another node or library. Third party libraries which uses the distribution protocol need to be updated with this.

See: massemanet/distel#61

Segfault running test_node

Following readme

Shell 1:

$ erl -sname abc
Erlang R16B03 (erts-5.10.4) [source] [64-bit] [smp:6:6] [async-threads:10] [kernel-poll:false]

Eshell V5.10.4  (abort with ^G)
(abc@gir)1> register(test, self()).
true

Shell 2:

eixx/src$ libtool --mode=execute gdb test_node
GNU gdb (Ubuntu 7.7.1-0ubuntu5~14.04.2) 7.7.1
Copyright (C) 2014 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.  Type "show copying"
and "show warranty" for details.
This GDB was configured as "x86_64-linux-gnu".
Type "show configuration" for configuration details.
For bug reporting instructions, please see:
<http://www.gnu.org/software/gdb/bugs/>.
Find the GDB manual and other documentation resources online at:
<http://www.gnu.org/software/gdb/documentation/>.
For help, type "help".
Type "apropos word" to search for commands related to "word"...
Reading symbols from /home/myers/test_eixx/eixx/src/.libs/lt-test_node...done.
(gdb) run -n a@gir -r abc@gir
Starting program: /home/myers/test_eixx/eixx/src/.libs/lt-test_node -n a@gir -r abc@gir
[Thread debugging using libthread_db enabled]
Using host libthread_db library "/lib/x86_64-linux-gnu/libthread_db.so.1".
[New Thread 0x7ffff5394700 (LWP 15159)]

Program received signal SIGSEGV, Segmentation fault.
0x00007fffffffdd10 in ?? ()
(gdb) bt
#0  0x00007fffffffdd10 in ?? ()
#1  0x000000000043eb5f in std::function<bool (eixx::connect::transport_msg<std::allocator<char> >*&, boost::system::error_code const&)>::operator()(eixx::connect::transport_msg<std::allocator<char> >*&, boost::system::error_code const&) const (
    this=0x7fffffffdc40,
    __args#0=@0x7fffffffd7f8: 0x4256ca <std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_add_ref_lock()+24>,
    __args#1=...) at /usr/include/c++/4.8/functional:2464
#2  0x00000000004443c7 in eixx::util::async_queue<eixx::connect::transport_msg<std::allocator<char> >*, std::allocator<char> >::process_queue(std::function<bool (eixx::connect::transport_msg<std::allocator<char> >*&, boost::system::error_code const&)> const&, boost::system::error_code const&, std::chrono::duration<long, std::ratio<1l, 1000l> >, int) (this=0x6ca440,
    h=..., ec=..., repeat=..., repeat_count=2147483647) at ./../include/eixx/util/async_queue.hpp:109
#3  0x000000000043ebde in eixx::util::async_queue<eixx::connect::transport_msg<std::allocator<char> >*, std::allocator<char> >::operator()(std::function<bool (eixx::connect::transport_msg<std::allocator<char> >*&, boost::system::error_code const&)> const&, boost::system::error_code const&, std::chrono::duration<long, std::ratio<1l, 1000l> >, int) (this=0x6ca440,
    h=..., ec=..., repeat=..., repeat_count=2147483647) at ./../include/eixx/util/async_queue.hpp:132
#4  0x00000000004399be in eixx::util::async_queue<eixx::connect::transport_msg<std::allocator<char> >*, std::allocator<char> >::async_dequeue(std::function<bool (eixx::connect::transport_msg<std::allocator<char> >*&, boost::system::error_code const&)> const&, std::chrono::duration<long, std::ratio<1l, 1000l> >, int)::{lambda(boost::system::error_code const&)#2}::operator()(boost::system::error_code const&) const (__closure=0x7fffffffd9d0, e=...)
    at ./../include/eixx/util/async_queue.hpp:222
#5  0x0000000000462163 in boost::asio::detail::binder1<eixx::util::async_queue<eixx::connect::transport_msg<std::allocator<char> >*, std::allocator<char> >::async_dequeue(std::function<bool (eixx::connect::transport_msg<std::allocator<char> >*&, boost::system::error_code const&)> const&, std::chrono::duration<long, std::ratio<1l, 1000l> >, int)::{lambda(boost::system::error_code const&)#2}, boost::system::error_code>::operator()() (this=0x7fffffffd9d0)
    at /usr/include/boost/asio/detail/bind_handler.hpp:47
#6  0x000000000045f2c7 in boost::asio::asio_handler_invoke<boost::asio::detail::binder1<eixx::util::async_queue<eixx::connect::transport_msg<std::allocator<char> >*, std::allocator<char> >::async_dequeue(std::function<bool (eixx::connect::transport_msg<std::allocator<char> >*&, boost::system::error_code const&)> const&, std::chrono::duration<long, std::ratio<1l, 1000l> >, int)::{lambda(boost::system::error_code const&)#2}, boost::system::error_code> >(boost::asio::detail::binder1<eixx::util::async_queue<eixx::connect::transport_msg<std::allocator<char> >*, std::allocator<char> >::async_dequeue(std::function<bool (eixx::connect::transport_msg<std::allocator<char> >*&, boost::system::error_code const&)> const&, std::chrono::duration<long, std::ratio<1l, 1000l> >, int)::{lambda(boost::system::error_code const&)#2}, boost::system::error_code>, ...) (
    function=...) at /usr/include/boost/asio/handler_invoke_hook.hpp:64
#7  0x000000000045b779 in boost_asio_handler_invoke_helpers::invoke<boost::asio::detail::binder1<eixx::util::async_queue<eixx::connect::transport_msg<std::allocator<char> >*, std::allocator<char> >::async_dequeue(std::function<bool (eixx::connect::transport_msg<std::allocator<char> >*&, boost::system::error_code const&)> const&, std::chrono::duration<long, std::ratio<1l, 1000l> >, int)::{lambda(boost::system::error_code const&)#2}, boost::system::error_code>, {lambda(boost::system::error_code const&)#2}>(boost::asio::detail::binder1<eixx::util::async_queue<eixx::connect::transport_msg<std::allocator<char> >*, std::allocator<char> >::async_dequeue(std::function<bool (eixx::connect::transport_msg<std::allocator<char> >*&, boost::system::error_code const&)> const&, std::chrono::duration<long, std::ratio<1l, 1000l> >, int)::{lambda(boost::system::error_code const&)#2}, boost::system::error_code>&, {lambda(boost::system::error_code const&)#2}&) (function=..., context=...)
    at /usr/include/boost/asio/detail/handler_invoke_helpers.hpp:37
#8  0x0000000000456dda in boost::asio::detail::wait_handler<eixx::util::async_queue<eixx::connect::transport_msg<std::allocator<char> >*, std::allocator<char> >::async_dequeue(std::function<bool (eixx::connect::transport_msg<std::allocator<char> >*&, boost::system::error_code const&)> const&, std::chrono::duration<long, std::ratio<1l, 1000l> >, int)::{lambda(boost::system::error_code const&)#2}>::do_complete(boost::asio::detail::task_io_service*, boost::asio::detail::task_io_service_operation*, boost::system::error_code const&, unsigned long) (owner=0x6c6d80, base=0x6ef320)
    at /usr/include/boost/asio/detail/wait_handler.hpp:70
#9  0x00000000004293b0 in boost::asio::detail::task_io_service_operation::complete (this=0x6ef320, owner=..., ec=...,
    bytes_transferred=0) at /usr/include/boost/asio/detail/task_io_service_operation.hpp:37
#10 0x000000000042bcf7 in boost::asio::detail::task_io_service::do_run_one (this=0x6c6d80, lock=..., this_thread=...,
    ec=...) at /usr/include/boost/asio/detail/impl/task_io_service.ipp:384
#11 0x000000000042b717 in boost::asio::detail::task_io_service::run (this=0x6c6d80, ec=...)
    at /usr/include/boost/asio/detail/impl/task_io_service.ipp:153
#12 0x000000000042c0a3 in boost::asio::io_service::run (this=0x7fffffffdd10)
    at /usr/include/boost/asio/impl/io_service.ipp:59
#13 0x0000000000434d10 in eixx::connect::basic_otp_node<std::allocator<char>, std::recursive_mutex>::run (
    this=0x7fffffffdd60) at ./../include/eixx/connect/basic_otp_node.hpp:165
#14 0x0000000000423bf7 in main (argc=5, argv=0x7fffffffe008) at test_node.cpp:145

INSTALL cannot find libeixx_d.so.1.4

Hello,

I do the following commands:

make -j8 distclean
make -j8 bootstrap prefix=/usr build=Release
make -j8 verbose=true
make install DESTDIR=/home/abuild/rpmbuild/BUILDROOT/eixx-1.4+git20160510.cd24f3d-1.1.x86_64
[  162s] CMake Error at src/cmake_install.cmake:58 (file):
[  162s]   file INSTALL cannot find
[  162s]   "/home/abuild/rpmbuild/BUILD/eixx-1.4+git20160510.cd24f3d/build/src/libeixx_d.so.1.4".
[  162s] Call Stack (most recent call first):
[  162s]   cmake_install.cmake:92 (include)
[  162s]   
[  162s] 
[  162s] 
[  162s] Makefile:71: recipe for target 'install' failed
[  162s] make[1]: *** [install] Error 1
[  162s] Makefile:47: recipe for target 'install' failed
[  162s] make: *** [install] Error 2

error: no matching member function for call to 'get'

Environment:

  • MacOs 10.15.7
  • Erlang/OTP 22

How to reproduce:

brew install cmake boost [email protected] doxygen
make distclean
env OPENSSL_ROOT_DIR=$(brew --prefix openssl) BOOST_ROOT=$(brew --prefix boost) make bootstrap toolchain=clang build=release prefix=/usr/local/opt verbose=true

Error:

/Users/heri/work/eixx/test/test_perf.cpp:23:30: error: use of undeclared identifier 'RUSAGE_THREAD'
    void begin() { getrusage(RUSAGE_THREAD, &start); }
                             ^
/Users/heri/work/eixx/test/test_perf.cpp:30:19: error: use of undeclared identifier 'RUSAGE_THREAD'
        getrusage(RUSAGE_THREAD, &end);
                  ^
2 errors generated.
make[3]: *** [test/CMakeFiles/test-perf.dir/test_perf.cpp.o] Error 1
make[2]: *** [test/CMakeFiles/test-perf.dir/all] Error 2
make[2]: *** Waiting for unfinished jobs....
/Users/heri/work/eixx/test/test_eterm.cpp:36:31: error: no matching member function for call to 'get'
    BOOST_REQUIRE_EQUAL(10, t.get<size_t>());
                            ~~^~~~~~~~~~~
/usr/local/Cellar/boost/1.76.0/include/boost/test/tools/old/interface.hpp:157:86: note: expanded from macro 'BOOST_REQUIRE_EQUAL'
    ::boost::test_tools::tt_detail::equal_impl_frwd(), "", REQUIRE, CHECK_EQUAL, (L)(R) )
                                                                                     ^
/usr/local/Cellar/boost/1.76.0/include/boost/test/tools/old/interface.hpp:74:61: note: expanded from macro 'BOOST_TEST_TOOL_IMPL'
        BOOST_JOIN( BOOST_TEST_TOOL_PASS_ARGS, frwd_type )( ARGS ) );           \
                                                            ^~~~
/usr/local/Cellar/boost/1.76.0/include/boost/test/tools/old/interface.hpp:57:57: note: expanded from macro 'BOOST_TEST_TOOL_PASS_ARGS0'
    BOOST_PP_SEQ_FOR_EACH( BOOST_TEST_TOOL_PASS_ARG, _, ARGS )
                                                        ^~~~
note: (skipping 20 expansions in backtrace; use -fmacro-backtrace-limit=0 to see all)
/usr/local/Cellar/boost/1.76.0/include/boost/preprocessor/seq/elem.hpp:45:60: note: expanded from macro 'BOOST_PP_SEQ_ELEM_II'
#    define BOOST_PP_SEQ_ELEM_II(im) BOOST_PP_SEQ_ELEM_III(im)
                                                           ^~
/usr/local/Cellar/boost/1.76.0/include/boost/preprocessor/seq/elem.hpp:46:41: note: expanded from macro 'BOOST_PP_SEQ_ELEM_III'
#    define BOOST_PP_SEQ_ELEM_III(x, _) x
                                        ^
/usr/local/Cellar/boost/1.76.0/include/boost/test/tools/old/interface.hpp:53:49: note: expanded from macro 'BOOST_TEST_TOOL_PASS_ARG'
#define BOOST_TEST_TOOL_PASS_ARG( r, _, arg ) , arg, BOOST_STRINGIZE( arg )
                                                ^~~
/Users/heri/work/eixx/include/eixx/marshal/eterm.hpp:438:5: note: candidate template ignored: requirement
      'std::is_same<unsigned long, double>::value' was not satisfied [with T = unsigned long]
    get() const { return to_double(); }
    ^
/Users/heri/work/eixx/include/eixx/marshal/eterm.hpp:442:5: note: candidate template ignored: requirement
      'std::is_same<unsigned long, bool>::value' was not satisfied [with T = unsigned long]
    get() const { return to_bool(); }
    ^
/Users/heri/work/eixx/include/eixx/marshal/eterm.hpp:454:5: note: candidate template ignored: requirement 'std::is_same<unsigned long,
      char>::value || std::is_same<unsigned long, short>::value || std::is_same<unsigned long, int>::value || std::is_same<unsigned
      long, long>::value || std::is_same<unsigned long, unsigned char>::value || std::is_same<unsigned long, unsigned short>::value ||
      std::is_same<unsigned long, unsigned int>::value || std::is_same<unsigned long, unsigned long long>::value' was not satisfied
      [with T = unsigned long]
    get() const { return T(to_long()); }
    ^
/Users/heri/work/eixx/include/eixx/marshal/eterm.hpp:458:5: note: candidate template ignored: requirement 'std::is_same<unsigned long,
      std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > >::value' was not satisfied
      [with T = unsigned long]
    get() const { return to_str().to_str(); }
    ^
1 error generated.
make[3]: *** [test/CMakeFiles/test-eterm.dir/test_eterm.cpp.o] Error 1
make[3]: *** Waiting for unfinished jobs....
make[2]: *** [test/CMakeFiles/test-eterm.dir/all] Error 2
make[1]: *** [all] Error 2
make: *** [all] Error 2

License Clarification

Most of the files have a GPL header, but the LICENSE file indicates Apache 2.0. Has the license changed to Apache 2.0?

Sorry to have to ask, but we were hoping to use it in a non GPL project.

Fails to generate make files on OSX

Not sure how to compile the files on OSX 10.9.5.

$ ./bootstrap
autoreconf: Entering directory `.'
autoreconf: configure.ac: not using Gettext
autoreconf: running: aclocal -I build-aux
autoreconf: configure.ac: tracing
autoreconf: running: glibtoolize --copy
autoreconf: running: /usr/local/Cellar/autoconf/2.69/bin/autoconf
configure.ac:78: error: possibly undefined macro: AC_MSG_ERROR
      If this token and others are legitimate, please use m4_pattern_allow.
      See the Autoconf documentation.
autoreconf: /usr/local/Cellar/autoconf/2.69/bin/autoconf failed with exit status: 1

test_node segfaults when following directions in readme

./test_node -n a@fc12 -r abc@fc12

I'm trying the above command from the README to see a remote node in action. I replaced fc12 with my own hostname. This segfaults. I tried it in gdb

libtool --mode=execute gdb test_node
run -n a@fc12 -r abc@fc12
bt

#0  0x00007fffffffdd20 in ?? ()
#1  0x000000000043eb5b in std::function<bool (eixx::connect::transport_msg<std::allocator<char> >*&, boost::system::error_code const&)>::operator()(eixx::connect::transport_msg<std::allocator<char> >*&, boost::system::error_code const&) const (
    this=0x7fffffffdc50,
    __args#0=@0x7fffffffd828: 0x4256ca <std::_Sp_counted_base<(__gnu_cxx::_Lock_policy)2>::_M_add_ref_lock()+24>,
    __args#1=...) at /usr/include/c++/4.8/functional:2464
#2  0x00000000004443c3 in eixx::util::async_queue<eixx::connect::transport_msg<std::allocator<char> >*, std::allocator<char> >::process_queue(std::function<bool (eixx::connect::transport_msg<std::allocator<char> >*&, boost::system::error_code const&)> const&, boost::system::error_code const&, std::chrono::duration<long, std::ratio<1l, 1000l> >, int) (this=0x6c8440,
    h=..., ec=..., repeat=..., repeat_count=2147483647) at ./../include/eixx/util/async_queue.hpp:109
#3  0x000000000043ebda in eixx::util::async_queue<eixx::connect::transport_msg<std::allocator<char> >*, std::allocator<char> >::operator()(std::function<bool (eixx::connect::transport_msg<std::allocator<char> >*&, boost::system::error_code const&)> const&, boost::system::error_code const&, std::chrono::duration<long, std::ratio<1l, 1000l> >, int) (this=0x6c8440,
    h=..., ec=..., repeat=..., repeat_count=2147483647) at ./../include/eixx/util/async_queue.hpp:132
#4  0x00000000004399ba in eixx::util::async_queue<eixx::connect::transport_msg<std::allocator<char> >*, std::allocator<char> >::async_dequeue(std::function<bool (eixx::connect::transport_msg<std::allocator<char> >*&, boost::system::error_code const&)> const&, std::chrono::duration<long, std::ratio<1l, 1000l> >, int)::{lambda(boost::system::error_code const&)#2}::operator()(boost::system::error_code const&) const (__closure=0x7fffffffda80, e=...) at ./../include/eixx/util/async_queue.hpp:222
#5  0x0000000000461dbd in boost::asio::detail::binder1<eixx::util::async_queue<eixx::connect::transport_msg<std::allocator<char> >*, std::allocator<char> >::async_dequeue(std::function<bool (eixx::connect::transport_msg<std::allocator<char> >*&, boost::system::error_code const&)> const&, std::chrono::duration<long, std::ratio<1l, 1000l> >, int)::{lambda(boost::system::error_code const&)#2}, boost::system::error_code>::operator()() (this=0x7fffffffda80)
    at /usr/include/boost/asio/detail/bind_handler.hpp:47
#6  0x000000000045f125 in boost::asio::asio_handler_invoke<boost::asio::detail::binder1<eixx::util::async_queue<eixx::connect::transport_msg<std::allocator<char> >*, std::allocator<char> >::async_dequeue(std::function<bool (eixx::connect::transport_msg<std::allocator<char> >*&, boost::system::error_code const&)> const&, std::chrono::duration<long, std::ratio<1l, 1000l> >, int)::{lambda(boost::system::error_code const&)#2}, boost::system::error_code> >(boost::asio::detail::binder1<eixx::util::async_queue<eixx::connect::transport_msg<std::allocator<char> >*, std::allocator<char> >::async_dequeue(std::function<bool (eixx::connect::transport_msg<std::allocator<char> >*&, boost::system::error_code const&)> const&, std::chrono::duration<long, std::ratio<1l, 1000l> >, int)::{lambda(boost::system::error_code const&)#2}, boost::system::error_code>&, ...) (
    function=...) at /usr/include/boost/asio/handler_invoke_hook.hpp:69

Built with libboost1.55-dev and erlang R16B03.

Error while linking `basic_otp_node_local`

Error while linking basic_otp_node_local:

[100%] Linking CXX executable 
Undefined symbols for architecture x86_64:
  "eixx::connect::basic_otp_node_local::basic_otp_node_local(std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&)", referenced from:
      eixx::connect::basic_otp_node<std::__1::allocator<char>, std::__1::recursive_mutex>::basic_otp_node(boost::asio::io_context&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::basic_string<char, std::__1::char_traits<char>, std::__1::allocator<char> > const&, std::__1::allocator<char> const&, signed char) in matching_node.cpp.o
ld: symbol(s) not found for architecture x86_64

CMakefile:

# PkgConfig
find_package(Boost 1.55.0 REQUIRED COMPONENTS system thread)
find_package(PkgConfig REQUIRED)
pkg_search_module(EIXX REQUIRED eixx>=1.4)
pkg_search_module(OPENSSL REQUIRED openssl)
if(Boost_FOUND)
  #include_directories(SYSTEM ${Boost_INCLUDE_DIRS})
  link_directories(${Boost_LIBRARY_DIRS})
  message(STATUS "Found boost: ${Boost_LIBRARY_DIRS}")
endif()
if(EIXX_FOUND)
  #include_directories(SYSTEM ${EIXX_INCLUDE_DIRS})
  link_directories(${EIXX_LIBRARY_DIRS})
  message(STATUS "Found eixx: ${EIXX_LIBRARY_DIRS} ${EIXX_LIBRARIES}")
endif()
if(OPENSSL_FOUND)
  #include_directories(SYSTEM ${OPENSSL_INCLUDE_DIRS})
  link_directories(${OPENSSL_LIBRARY_DIRS})
	message(STATUS "Found openssl: ${OPENSSL_LIBRARY_DIRS}")
endif()

...
target_include_directories(${EXAMPLE_TARGET} PRIVATE ${EIXX_INCLUDE_DIRS} ${Boost_INCLUDE_DIRS} ${OPENSSL_INCLUDE_DIRS})
target_link_libraries(${EXAMPLE_TARGET} ${LINKLIBS} ${EIXX_LIBRARIES})
...

Shouldn't these lines include the basic_otp_node_local into the shared library?

eixx/src/CMakeLists.txt

Lines 8 to 16 in 5c0baa3

if (NOT EIXX_MARSHAL_ONLY)
list(APPEND EIXX_SRCS
basic_otp_node_local.cpp
test_node.cpp
)
endif()
add_library(${PROJECT_NAME} SHARED ${EIXX_SRCS})
add_library(${PROJECT_NAME}_static STATIC ${EIXX_SRCS})

test-connect: fatal error: in "test_async_queue"

Hello,

I am using boost-1.60.0 and gcc-5.3.1

When I run test-connect, I see the following:

> ./test/test-connect 
Running 2 test cases...
unknown location(0): fatal error: in "test_async_queue": boost::exception_detail::clone_impl<boost::exception_detail::error_info_injector<boost::bad_weak_ptr> >: tr1::bad_weak_ptr
/home/matwey/lab/eixx/test/test_async_queue.cpp(72): last checkpoint

and then test-connect is forever waiting on ioservice.run()

#0  0x00007ffff5e779f3 in epoll_wait () from /lib64/libc.so.6
#1  0x000000000055ce07 in boost::asio::detail::epoll_reactor::run (this=0x8280e0, block=true, ops=...)
    at /usr/include/boost/asio/detail/impl/epoll_reactor.ipp:392
#2  0x000000000055dd90 in boost::asio::detail::task_io_service::do_run_one (this=0x823190, lock=..., this_thread=..., ec=...)
    at /usr/include/boost/asio/detail/impl/task_io_service.ipp:356
#3  0x000000000055d908 in boost::asio::detail::task_io_service::run (this=0x823190, ec=...)
    at /usr/include/boost/asio/detail/impl/task_io_service.ipp:149
#4  0x000000000055e0b9 in boost::asio::io_service::run (this=0x7fffffffc2f0) at /usr/include/boost/asio/impl/io_service.ipp:59
#5  0x000000000052e308 in test_async_queue_concurrent::test_method (this=0x7fffffffc43f)
    at /home/matwey/lab/eixx/test/test_async_queue.cpp:144
#6  0x000000000052df53 in test_async_queue_concurrent_invoker () at /home/matwey/lab/eixx/test/test_async_queue.cpp:122
#7  0x000000000058ee6a in boost::detail::function::void_function_invoker0<void (*)(), void>::invoke (function_ptr=...)
    at /usr/include/boost/function/function_template.hpp:118
#8  0x000000000055f408 in boost::function0<void>::operator() (this=0x81cf18) at /usr/include/boost/function/function_template.hpp:771
#9  0x000000000055091d in boost::detail::forward::operator() (this=0x7fffffffd6d8)
    at /usr/include/boost/test/impl/execution_monitor.ipp:1304
#10 0x000000000058a94f in boost::detail::function::function_obj_invoker0<boost::detail::forward, int>::invoke (function_obj_ptr=...)
    at /usr/include/boost/function/function_template.hpp:138
#11 0x0000000000573a9e in boost::function0<int>::operator() (this=0x7fffffffd6d0)
    at /usr/include/boost/function/function_template.hpp:771
#12 0x000000000056386d in boost::detail::do_invoke<boost::shared_ptr<boost::detail::translator_holder_base>, boost::function<int ()> >(boost::shared_ptr<boost::detail::translator_holder_base> const&, boost::function<int ()> const&) (tr=..., F=...)
    at /usr/include/boost/test/impl/execution_monitor.ipp:281
#13 0x000000000051d226 in boost::execution_monitor::catch_signals(boost::function<int ()> const&) (
    this=0x8084c0 <boost::unit_test::singleton<boost::unit_test::unit_test_monitor_t>::instance()::the_inst>, F=...)
    at /usr/include/boost/test/impl/execution_monitor.ipp:870
#14 0x000000000051d38d in boost::execution_monitor::execute(boost::function<int ()> const&) (
    this=0x8084c0 <boost::unit_test::singleton<boost::unit_test::unit_test_monitor_t>::instance()::the_inst>, F=...)
    at /usr/include/boost/test/impl/execution_monitor.ipp:1207
#15 0x000000000051dcb3 in boost::execution_monitor::vexecute(boost::function<void ()> const&) (
    this=0x8084c0 <boost::unit_test::singleton<boost::unit_test::unit_test_monitor_t>::instance()::the_inst>, F=...)
    at /usr/include/boost/test/impl/execution_monitor.ipp:1313
#16 0x0000000000525721 in boost::unit_test::unit_test_monitor_t::execute_and_translate(boost::function<void ()> const&, unsigned int) (
    this=0x8084c0 <boost::unit_test::singleton<boost::unit_test::unit_test_monitor_t>::instance()::the_inst>, func=..., timeout=0)
    at /usr/include/boost/test/impl/unit_test_monitor.ipp:46
---Type <return> to continue, or q <return> to quit---
#17 0x000000000054fa25 in boost::unit_test::framework::state::execute_test_tree (
    this=0x806be0 <boost::unit_test::framework::impl::(anonymous namespace)::s_frk_state()::the_inst>, tu_id=65537, timeout=0)
    at /usr/include/boost/test/impl/framework.ipp:691
#18 0x000000000054f489 in boost::unit_test::framework::state::execute_test_tree (
    this=0x806be0 <boost::unit_test::framework::impl::(anonymous namespace)::s_frk_state()::the_inst>, tu_id=1, timeout=0)
    at /usr/include/boost/test/impl/framework.ipp:642
#19 0x000000000051b60b in boost::unit_test::framework::run (id=1, continue_test=true)
    at /usr/include/boost/test/impl/framework.ipp:1230
#20 0x00000000005253b2 in boost::unit_test::unit_test_main (init_func=0x52c603 <init_unit_test_suite(int, char**)>, argc=1, 
    argv=0x7fffffffe588) at /usr/include/boost/test/impl/unit_test_main.ipp:229
#21 0x0000000000525634 in main (argc=1, argv=0x7fffffffe588) at /usr/include/boost/test/impl/unit_test_main.ipp:284

error: declaration shadows a local variable [-Werror,-Wshadow]

/usr/local/Cellar/eixx/1.4/include/eixx/marshal/eterm_format.hxx:390:39: error: declaration shadows a local variable [-Werror,-Wshadow]
                    std::vector<char> v;
                                      ^
/usr/local/Cellar/eixx/1.4/include/eixx/marshal/eterm_format.hxx:353:23: note: previous declaration is here
        vector<Alloc> v(a_alloc);

armv7hl: Error: bad instruction `bsfl [r5],r1`

When compiling on armv7hl I have the following:

[  761s] /tmp/ccv1DxyP.s: Assembler messages:
[  761s] /tmp/ccv1DxyP.s:154954: Error: bad instruction `bsfl [r5],r1'
[  769s] Makefile:673: recipe for target 'test_node-test_node.o' failed

Not all platforms havebsf* instructions, but some of them (for instance aarch64) seem to have alternatives.

static __inline__ unsigned long bit_scan_forward(unsigned long v)
{
    unsigned long r;
    __asm__ __volatile__(
        #if (__SIZEOF_LONG__ == 8)
            "bsfq %1, %0": "=r"(r): "rm"(v) );
        #else
            "bsfl %1, %0": "=r"(r): "rm"(v) );
        #endif
    return r;
}

Also, why don't just use things like __builtin_ffsl which will allow compiler to handle proper implementation on all platforms?

boost/lockfree/detail/branch_hints.hpp: No such file or directory

Hello,

I am using boost 1.60.0 and gcc 5.3.1, when I try to compile eixx from master I see the following:

[   69s] + make -j8
[   69s] Scanning dependencies of target eixx_static
[   69s] Scanning dependencies of target eixx
[   69s] [  4%] Building CXX object src/CMakeFiles/eixx.dir/basic_otp_node_local.cpp.o
[   69s] [  8%] Building CXX object src/CMakeFiles/eixx_static.dir/basic_otp_node_local.cpp.o
[   69s] [ 13%] Building CXX object src/CMakeFiles/eixx.dir/am.cpp.o
[   69s] [ 17%] Building CXX object src/CMakeFiles/eixx_static.dir/test_node.cpp.o
[   69s] [ 21%] Building CXX object src/CMakeFiles/eixx.dir/test_node.cpp.o
[   69s] [ 26%] Building CXX object src/CMakeFiles/eixx_static.dir/am.cpp.o
[   69s] In file included from /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/include/eixx/marshal/defaults.hpp:36:0,
[   69s]                  from /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/include/eixx/eterm.hpp:36,
[   69s]                  from /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/include/eixx/eixx.hpp:65,
[   69s]                  from /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/src/test_node.cpp:2:
[   69s] /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/include/eixx/util/compiler_hints.hpp:15:50: fatal error: boost/lockfree/detail/branch_hints.hpp: No such file or directory
[   69s] compilation terminated.
[   69s] src/CMakeFiles/eixx_static.dir/build.make:110: recipe for target 'src/CMakeFiles/eixx_static.dir/test_node.cpp.o' failed
[   69s] make[2]: *** [src/CMakeFiles/eixx_static.dir/test_node.cpp.o] Error 1
[   69s] make[2]: *** Waiting for unfinished jobs....
[   69s] In file included from /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/include/eixx/marshal/defaults.hpp:36:0,
[   69s]                  from /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/include/eixx/eterm.hpp:36,
[   69s]                  from /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/include/eixx/eixx.hpp:65,
[   69s]                  from /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/src/test_node.cpp:2:
[   69s] /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/include/eixx/util/compiler_hints.hpp:15:50: fatal error: boost/lockfree/detail/branch_hints.hpp: No such file or directory
[   69s] compilation terminated.
[   69s] In file included from /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/include/eixx/marshal/defaults.hpp:36:0,
[   69s]                  from /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/include/eixx/marshal/atom.hpp:39,
[   69s]                  from /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/include/eixx/marshal/am.hpp:35,
[   69s]                  from /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/src/am.cpp:25:
[   69s] /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/include/eixx/util/compiler_hints.hpp:15:50: fatal error: boost/lockfree/detail/branch_hints.hpp: No such file or directory
[   69s] compilation terminated.
[   69s] In file included from /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/include/eixx/marshal/defaults.hpp:36:0,
[   69s]                  from /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/include/eixx/marshal/atom.hpp:39,
[   69s]                  from /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/include/eixx/marshal/am.hpp:35,
[   69s]                  from /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/src/am.cpp:25:
[   69s] /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/include/eixx/util/compiler_hints.hpp:15:50: fatal error: boost/lockfree/detail/branch_hints.hpp: No such file or directory
[   69s] compilation terminated.
[   69s] src/CMakeFiles/eixx.dir/build.make:62: recipe for target 'src/CMakeFiles/eixx.dir/am.cpp.o' failed
[   69s] make[2]: *** [src/CMakeFiles/eixx.dir/am.cpp.o] Error 1
[   69s] make[2]: *** Waiting for unfinished jobs....
[   69s] src/CMakeFiles/eixx.dir/build.make:110: recipe for target 'src/CMakeFiles/eixx.dir/test_node.cpp.o' failed
[   69s] make[2]: *** [src/CMakeFiles/eixx.dir/test_node.cpp.o] Error 1
[   69s] src/CMakeFiles/eixx_static.dir/build.make:62: recipe for target 'src/CMakeFiles/eixx_static.dir/am.cpp.o' failed
[   69s] make[2]: *** [src/CMakeFiles/eixx_static.dir/am.cpp.o] Error 1
[   69s] In file included from /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/include/eixx/marshal/defaults.hpp:36:0,
[   69s]                  from /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/include/eixx/marshal/atom.hpp:39,
[   69s]                  from /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/include/eixx/connect/basic_otp_node_local.hpp:40,
[   69s]                  from /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/src/basic_otp_node_local.cpp:29:
[   69s] /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/include/eixx/util/compiler_hints.hpp:15:50: fatal error: boost/lockfree/detail/branch_hints.hpp: No such file or directory
[   69s] compilation terminated.
[   70s] src/CMakeFiles/eixx_static.dir/build.make:86: recipe for target 'src/CMakeFiles/eixx_static.dir/basic_otp_node_local.cpp.o' failed
[   70s] make[2]: *** [src/CMakeFiles/eixx_static.dir/basic_otp_node_local.cpp.o] Error 1
[   70s] CMakeFiles/Makefile2:158: recipe for target 'src/CMakeFiles/eixx_static.dir/all' failed
[   70s] make[1]: *** [src/CMakeFiles/eixx_static.dir/all] Error 2
[   70s] make[1]: *** Waiting for unfinished jobs....
[   70s] In file included from /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/include/eixx/marshal/defaults.hpp:36:0,
[   70s]                  from /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/include/eixx/marshal/atom.hpp:39,
[   70s]                  from /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/include/eixx/connect/basic_otp_node_local.hpp:40,
[   70s]                  from /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/src/basic_otp_node_local.cpp:29:
[   70s] /home/abuild/rpmbuild/BUILD/eixx-1.1+git20160218.708555b/include/eixx/util/compiler_hints.hpp:15:50: fatal error: boost/lockfree/detail/branch_hints.hpp: No such file or directory
[   70s] compilation terminated.
[   70s] src/CMakeFiles/eixx.dir/build.make:86: recipe for target 'src/CMakeFiles/eixx.dir/basic_otp_node_local.cpp.o' failed
[   70s] make[2]: *** [src/CMakeFiles/eixx.dir/basic_otp_node_local.cpp.o] Error 1
[   70s] CMakeFiles/Makefile2:121: recipe for target 'src/CMakeFiles/eixx.dir/all' failed
[   70s] make[1]: *** [src/CMakeFiles/eixx.dir/all] Error 2
[   70s] Makefile:138: recipe for target 'all' failed
[   70s] make: *** [all] Error 2
[   70s] error: Bad exit status from /var/tmp/rpm-tmp.4rIbz8 (%build)

I seems that boost/lockfree/detail/branch_hints.hpp is missing in 1.60 now.

Fails to compile on osx.

I installed autoconf-archive and did ./bootstrap && ./configure && make

$ make
/Applications/Xcode.app/Contents/Developer/usr/bin/make  all-recursive
Making all in src
/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..     -g -O0 -I../include -pthread -I/usr/local/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/src -MMD -Wall -Wno-unused-local-typedefs -fno-strict-aliasing -std=c++11 -DBOOST_SYSTEM_NO_DEPRECATED=1 -MT libeixx_la-am.lo -MD -MP -MF .deps/libeixx_la-am.Tpo -c -o libeixx_la-am.lo `test -f 'am.cpp' || echo './'`am.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -g -O0 -I../include -pthread -I/usr/local/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/src -MMD -Wall -Wno-unused-local-typedefs -fno-strict-aliasing -std=c++11 -DBOOST_SYSTEM_NO_DEPRECATED=1 -MT libeixx_la-am.lo -MD -MP -MF .deps/libeixx_la-am.Tpo -c am.cpp  -fno-common -DPIC -o .libs/libeixx_la-am.o
clang: warning: argument unused during compilation: '-MMD'
warning: unknown warning option '-Wno-unused-local-typedefs'
      [-Wunknown-warning-option]
1 warning generated.
mv -f .deps/libeixx_la-am.Tpo .deps/libeixx_la-am.Plo
/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..     -g -O0 -I../include -pthread -I/usr/local/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/src -MMD -Wall -Wno-unused-local-typedefs -fno-strict-aliasing -std=c++11 -DBOOST_SYSTEM_NO_DEPRECATED=1 -MT libeixx_la-atom.lo -MD -MP -MF .deps/libeixx_la-atom.Tpo -c -o libeixx_la-atom.lo `test -f 'atom.cpp' || echo './'`atom.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -g -O0 -I../include -pthread -I/usr/local/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/src -MMD -Wall -Wno-unused-local-typedefs -fno-strict-aliasing -std=c++11 -DBOOST_SYSTEM_NO_DEPRECATED=1 -MT libeixx_la-atom.lo -MD -MP -MF .deps/libeixx_la-atom.Tpo -c atom.cpp  -fno-common -DPIC -o .libs/libeixx_la-atom.o
clang: warning: argument unused during compilation: '-MMD'
warning: unknown warning option '-Wno-unused-local-typedefs'
      [-Wunknown-warning-option]
In file included from atom.cpp:25:
In file included from ../include/eixx/marshal/eterm.hpp:51:
In file included from ../include/eixx/marshal/tuple.hpp:41:
../include/eixx/marshal/visit.hpp:41:31: warning: class template 'tuple' was
      previously declared as a struct template [-Wmismatched-tags]
    template <typename Alloc> class tuple;
                              ^
../include/eixx/marshal/defaults.hpp:44:42: note: previous use is here
        template <typename Alloc> struct tuple;
                                         ^
In file included from atom.cpp:25:
In file included from ../include/eixx/marshal/eterm.hpp:51:
In file included from ../include/eixx/marshal/tuple.hpp:41:
../include/eixx/marshal/visit.hpp:42:31: warning: class template 'list' was
      previously declared as a struct template [-Wmismatched-tags]
    template <typename Alloc> class list;
                              ^
../include/eixx/marshal/defaults.hpp:45:42: note: previous use is here
        template <typename Alloc> struct list;
                                         ^
In file included from atom.cpp:25:
In file included from ../include/eixx/marshal/eterm.hpp:51:
../include/eixx/marshal/tuple.hpp:48:27: warning: class template 'eterm' was
      previously declared as a struct template [-Wmismatched-tags]
template <typename Alloc> class eterm;
                          ^
../include/eixx/marshal/defaults.hpp:43:42: note: previous use is here
        template <typename Alloc> struct eterm;
                                         ^
In file included from atom.cpp:25:
In file included from ../include/eixx/marshal/eterm.hpp:51:
../include/eixx/marshal/tuple.hpp:51:1: warning: 'tuple' defined as a class
      template here but previously declared as a struct template
      [-Wmismatched-tags]
class tuple {
^
../include/eixx/marshal/defaults.hpp:44:35: note: did you mean class here?
        template <typename Alloc> struct tuple;
                                  ^~~~~~
                                  class
In file included from atom.cpp:25:
In file included from ../include/eixx/marshal/eterm.hpp:52:
../include/eixx/marshal/list.hpp:52:1: warning: 'list' defined as a class
      template here but previously declared as a struct template
      [-Wmismatched-tags]
class list : protected alloc_base<cons<Alloc>, Alloc> {
^
../include/eixx/marshal/defaults.hpp:45:35: note: did you mean class here?
        template <typename Alloc> struct list;
                                  ^~~~~~
                                  class
In file included from atom.cpp:25:
../include/eixx/marshal/eterm.hpp:132:1: warning: 'eterm' defined as a class
      template here but previously declared as a struct template
      [-Wmismatched-tags]
class eterm {
^
../include/eixx/marshal/defaults.hpp:43:35: note: did you mean class here?
        template <typename Alloc> struct eterm;
                                  ^~~~~~
                                  class
In file included from atom.cpp:25:
In file included from ../include/eixx/marshal/eterm.hpp:606:
In file included from ../include/eixx/marshal/eterm.ipp:39:
In file included from ../include/eixx/marshal/eterm_format.hpp:70:
../include/eixx/marshal/eterm_format.ipp:108:16: warning: 'static' function
      'pvariable' declared in header file should be declared 'static inline'
      [-Wunneeded-internal-declaration]
    static var pvariable(const char **fmt)
               ^
../include/eixx/marshal/eterm_format.ipp:148:17: warning: 'static' function
      'patom' declared in header file should be declared 'static inline'
      [-Wunneeded-internal-declaration]
    static atom patom(const char **fmt)
                ^
../include/eixx/marshal/eterm_format.ipp:161:17: warning: 'static' function
      'pquotedatom' declared in header file should be declared 'static inline'
      [-Wunneeded-internal-declaration]
    static atom pquotedatom(const char **fmt)
                ^
10 warnings generated.
mv -f .deps/libeixx_la-atom.Tpo .deps/libeixx_la-atom.Plo
/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..     -g -O0 -I../include -pthread -I/usr/local/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/src -MMD -Wall -Wno-unused-local-typedefs -fno-strict-aliasing -std=c++11 -DBOOST_SYSTEM_NO_DEPRECATED=1 -MT libeixx_la-defaults.lo -MD -MP -MF .deps/libeixx_la-defaults.Tpo -c -o libeixx_la-defaults.lo `test -f 'defaults.cpp' || echo './'`defaults.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -g -O0 -I../include -pthread -I/usr/local/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/src -MMD -Wall -Wno-unused-local-typedefs -fno-strict-aliasing -std=c++11 -DBOOST_SYSTEM_NO_DEPRECATED=1 -MT libeixx_la-defaults.lo -MD -MP -MF .deps/libeixx_la-defaults.Tpo -c defaults.cpp  -fno-common -DPIC -o .libs/libeixx_la-defaults.o
clang: warning: argument unused during compilation: '-MMD'
warning: unknown warning option '-Wno-unused-local-typedefs'
      [-Wunknown-warning-option]
1 warning generated.
mv -f .deps/libeixx_la-defaults.Tpo .deps/libeixx_la-defaults.Plo
/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..     -g -O0 -I../include -pthread -I/usr/local/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/src -MMD -Wall -Wno-unused-local-typedefs -fno-strict-aliasing -std=c++11 -DBOOST_SYSTEM_NO_DEPRECATED=1 -MT libeixx_la-ref.lo -MD -MP -MF .deps/libeixx_la-ref.Tpo -c -o libeixx_la-ref.lo `test -f 'ref.cpp' || echo './'`ref.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -g -O0 -I../include -pthread -I/usr/local/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/src -MMD -Wall -Wno-unused-local-typedefs -fno-strict-aliasing -std=c++11 -DBOOST_SYSTEM_NO_DEPRECATED=1 -MT libeixx_la-ref.lo -MD -MP -MF .deps/libeixx_la-ref.Tpo -c ref.cpp  -fno-common -DPIC -o .libs/libeixx_la-ref.o
clang: warning: argument unused during compilation: '-MMD'
warning: unknown warning option '-Wno-unused-local-typedefs'
      [-Wunknown-warning-option]
In file included from ref.cpp:25:
In file included from ../include/eixx/marshal/eterm.hpp:51:
In file included from ../include/eixx/marshal/tuple.hpp:41:
../include/eixx/marshal/visit.hpp:41:31: warning: class template 'tuple' was
      previously declared as a struct template [-Wmismatched-tags]
    template <typename Alloc> class tuple;
                              ^
../include/eixx/marshal/defaults.hpp:44:42: note: previous use is here
        template <typename Alloc> struct tuple;
                                         ^
In file included from ref.cpp:25:
In file included from ../include/eixx/marshal/eterm.hpp:51:
In file included from ../include/eixx/marshal/tuple.hpp:41:
../include/eixx/marshal/visit.hpp:42:31: warning: class template 'list' was
      previously declared as a struct template [-Wmismatched-tags]
    template <typename Alloc> class list;
                              ^
../include/eixx/marshal/defaults.hpp:45:42: note: previous use is here
        template <typename Alloc> struct list;
                                         ^
In file included from ref.cpp:25:
In file included from ../include/eixx/marshal/eterm.hpp:51:
../include/eixx/marshal/tuple.hpp:48:27: warning: class template 'eterm' was
      previously declared as a struct template [-Wmismatched-tags]
template <typename Alloc> class eterm;
                          ^
../include/eixx/marshal/defaults.hpp:43:42: note: previous use is here
        template <typename Alloc> struct eterm;
                                         ^
In file included from ref.cpp:25:
In file included from ../include/eixx/marshal/eterm.hpp:51:
../include/eixx/marshal/tuple.hpp:51:1: warning: 'tuple' defined as a class
      template here but previously declared as a struct template
      [-Wmismatched-tags]
class tuple {
^
../include/eixx/marshal/defaults.hpp:44:35: note: did you mean class here?
        template <typename Alloc> struct tuple;
                                  ^~~~~~
                                  class
In file included from ref.cpp:25:
In file included from ../include/eixx/marshal/eterm.hpp:52:
../include/eixx/marshal/list.hpp:52:1: warning: 'list' defined as a class
      template here but previously declared as a struct template
      [-Wmismatched-tags]
class list : protected alloc_base<cons<Alloc>, Alloc> {
^
../include/eixx/marshal/defaults.hpp:45:35: note: did you mean class here?
        template <typename Alloc> struct list;
                                  ^~~~~~
                                  class
In file included from ref.cpp:25:
../include/eixx/marshal/eterm.hpp:132:1: warning: 'eterm' defined as a class
      template here but previously declared as a struct template
      [-Wmismatched-tags]
class eterm {
^
../include/eixx/marshal/defaults.hpp:43:35: note: did you mean class here?
        template <typename Alloc> struct eterm;
                                  ^~~~~~
                                  class
In file included from ref.cpp:25:
In file included from ../include/eixx/marshal/eterm.hpp:606:
In file included from ../include/eixx/marshal/eterm.ipp:39:
In file included from ../include/eixx/marshal/eterm_format.hpp:70:
../include/eixx/marshal/eterm_format.ipp:108:16: warning: 'static' function
      'pvariable' declared in header file should be declared 'static inline'
      [-Wunneeded-internal-declaration]
    static var pvariable(const char **fmt)
               ^
../include/eixx/marshal/eterm_format.ipp:148:17: warning: 'static' function
      'patom' declared in header file should be declared 'static inline'
      [-Wunneeded-internal-declaration]
    static atom patom(const char **fmt)
                ^
../include/eixx/marshal/eterm_format.ipp:161:17: warning: 'static' function
      'pquotedatom' declared in header file should be declared 'static inline'
      [-Wunneeded-internal-declaration]
    static atom pquotedatom(const char **fmt)
                ^
10 warnings generated.
mv -f .deps/libeixx_la-ref.Tpo .deps/libeixx_la-ref.Plo
/bin/sh ../libtool  --tag=CXX   --mode=compile g++ -DHAVE_CONFIG_H -I. -I..     -g -O0 -I../include -pthread -I/usr/local/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/src -MMD -Wall -Wno-unused-local-typedefs -fno-strict-aliasing -std=c++11 -DBOOST_SYSTEM_NO_DEPRECATED=1 -MT libeixx_la-basic_otp_node_local.lo -MD -MP -MF .deps/libeixx_la-basic_otp_node_local.Tpo -c -o libeixx_la-basic_otp_node_local.lo `test -f 'basic_otp_node_local.cpp' || echo './'`basic_otp_node_local.cpp
libtool: compile:  g++ -DHAVE_CONFIG_H -I. -I.. -g -O0 -I../include -pthread -I/usr/local/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/src -MMD -Wall -Wno-unused-local-typedefs -fno-strict-aliasing -std=c++11 -DBOOST_SYSTEM_NO_DEPRECATED=1 -MT libeixx_la-basic_otp_node_local.lo -MD -MP -MF .deps/libeixx_la-basic_otp_node_local.Tpo -c basic_otp_node_local.cpp  -fno-common -DPIC -o .libs/libeixx_la-basic_otp_node_local.o
clang: warning: argument unused during compilation: '-MMD'
warning: unknown warning option '-Wno-unused-local-typedefs'
      [-Wunknown-warning-option]
1 warning generated.
mv -f .deps/libeixx_la-basic_otp_node_local.Tpo .deps/libeixx_la-basic_otp_node_local.Plo
/bin/sh ../libtool  --tag=CXX   --mode=link g++  -g -O0 -I../include -pthread -I/usr/local/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/src -MMD -Wall -Wno-unused-local-typedefs -fno-strict-aliasing -std=c++11 -DBOOST_SYSTEM_NO_DEPRECATED=1  -L/usr/local/lib -lboost_system -o libeixx.la -rpath /Users/fire/Documents/eixx/install/lib libeixx_la-am.lo libeixx_la-atom.lo libeixx_la-defaults.lo libeixx_la-ref.lo libeixx_la-basic_otp_node_local.lo
libtool: link: g++ -dynamiclib -Wl,-undefined -Wl,dynamic_lookup -o .libs/libeixx.0.dylib  .libs/libeixx_la-am.o .libs/libeixx_la-atom.o .libs/libeixx_la-defaults.o .libs/libeixx_la-ref.o .libs/libeixx_la-basic_otp_node_local.o   -L/usr/local/lib -lboost_system  -O0 -pthread   -pthread -install_name  /Users/fire/Documents/eixx/install/lib/libeixx.0.dylib -compatibility_version 1 -current_version 1.0 -Wl,-single_module
clang: warning: argument unused during compilation: '-pthread'
clang: warning: argument unused during compilation: '-pthread'
libtool: link: (cd ".libs" && rm -f "libeixx.dylib" && ln -s "libeixx.0.dylib" "libeixx.dylib")
libtool: link: ( cd ".libs" && rm -f "libeixx.la" && ln -s "../libeixx.la" "libeixx.la" )
g++ -DHAVE_CONFIG_H -I. -I..  -g -O0 -I./../include -pthread -I/usr/local/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/include -I/usr/local/Cellar/erlang/17.1_1/lib/erlang/lib/erl_interface-3.7.17/src   -MMD -Wall -Wno-unused-local-typedefs -fno-strict-aliasing -std=c++11 -DBOOST_SYSTEM_NO_DEPRECATED=1 -MT test_node-test_node.o -MD -MP -MF .deps/test_node-test_node.Tpo -c -o test_node-test_node.o `test -f 'test_node.cpp' || echo './'`test_node.cpp
clang: warning: argument unused during compilation: '-MMD'
warning: unknown warning option '-Wno-unused-local-typedefs'
      [-Wunknown-warning-option]
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:65:
In file included from ./../include/eixx/eterm.hpp:37:
In file included from ./../include/eixx/marshal/eterm.hpp:51:
In file included from ./../include/eixx/marshal/tuple.hpp:41:
./../include/eixx/marshal/visit.hpp:41:31: warning: class template 'tuple' was
      previously declared as a struct template [-Wmismatched-tags]
    template <typename Alloc> class tuple;
                              ^
./../include/eixx/marshal/defaults.hpp:44:42: note: previous use is here
        template <typename Alloc> struct tuple;
                                         ^
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:65:
In file included from ./../include/eixx/eterm.hpp:37:
In file included from ./../include/eixx/marshal/eterm.hpp:51:
In file included from ./../include/eixx/marshal/tuple.hpp:41:
./../include/eixx/marshal/visit.hpp:42:31: warning: class template 'list' was
      previously declared as a struct template [-Wmismatched-tags]
    template <typename Alloc> class list;
                              ^
./../include/eixx/marshal/defaults.hpp:45:42: note: previous use is here
        template <typename Alloc> struct list;
                                         ^
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:65:
In file included from ./../include/eixx/eterm.hpp:37:
In file included from ./../include/eixx/marshal/eterm.hpp:51:
./../include/eixx/marshal/tuple.hpp:48:27: warning: class template 'eterm' was
      previously declared as a struct template [-Wmismatched-tags]
template <typename Alloc> class eterm;
                          ^
./../include/eixx/marshal/defaults.hpp:43:42: note: previous use is here
        template <typename Alloc> struct eterm;
                                         ^
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:65:
In file included from ./../include/eixx/eterm.hpp:37:
In file included from ./../include/eixx/marshal/eterm.hpp:51:
./../include/eixx/marshal/tuple.hpp:51:1: warning: 'tuple' defined as a class
      template here but previously declared as a struct template
      [-Wmismatched-tags]
class tuple {
^
./../include/eixx/marshal/defaults.hpp:44:35: note: did you mean class here?
        template <typename Alloc> struct tuple;
                                  ^~~~~~
                                  class
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:65:
In file included from ./../include/eixx/eterm.hpp:37:
In file included from ./../include/eixx/marshal/eterm.hpp:52:
./../include/eixx/marshal/list.hpp:52:1: warning: 'list' defined as a class
      template here but previously declared as a struct template
      [-Wmismatched-tags]
class list : protected alloc_base<cons<Alloc>, Alloc> {
^
./../include/eixx/marshal/defaults.hpp:45:35: note: did you mean class here?
        template <typename Alloc> struct list;
                                  ^~~~~~
                                  class
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:65:
In file included from ./../include/eixx/eterm.hpp:37:
./../include/eixx/marshal/eterm.hpp:132:1: warning: 'eterm' defined as a class
      template here but previously declared as a struct template
      [-Wmismatched-tags]
class eterm {
^
./../include/eixx/marshal/defaults.hpp:43:35: note: did you mean class here?
        template <typename Alloc> struct eterm;
                                  ^~~~~~
                                  class
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:66:
In file included from ./../include/eixx/connect.hpp:36:
./../include/eixx/connect/basic_otp_mailbox.hpp:105:45: warning: class template
      'async_queue' was previously declared as a struct template
      [-Wmismatched-tags]
    template<typename T, typename A> friend class util::async_queue;
                                            ^
./../include/eixx/util/async_queue.hpp:57:8: note: previous use is here
struct async_queue : std::enable_shared_from_this<async_queue<T, Alloc>>
       ^
./../include/eixx/connect/basic_otp_mailbox.hpp:105:45: note: did you mean
      struct here?
    template<typename T, typename A> friend class util::async_queue;
                                            ^~~~~
                                            struct
./../include/eixx/connect/basic_otp_mailbox.hpp:108:77: error: friend
      declaration of '_Function_handler' does not match any declaration in
      namespace 'std'
  ..._R, typename _F, typename... _Args> friend class std::_Function_handler;
                                                      ~~~~~^
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:66:
In file included from ./../include/eixx/connect.hpp:36:
In file included from ./../include/eixx/connect/basic_otp_mailbox.hpp:355:
./../include/eixx/connect/basic_otp_mailbox.ipp:93:18: warning: unused variable
      'res' [-Wunused-variable]
            bool res;
                 ^
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:66:
In file included from ./../include/eixx/connect.hpp:37:
In file included from ./../include/eixx/connect/basic_otp_connection.hpp:40:
In file included from ./../include/eixx/connect/transport_otp_connection.hpp:349:
In file included from ./../include/eixx/connect/transport_otp_connection.ipp:34:
In file included from ./../include/eixx/connect/transport_otp_connection_tcp.hpp:209:
./../include/eixx/connect/transport_otp_connection_tcp.ipp:694:5: warning:
      'MD5' is deprecated: first deprecated in OS X 10.7
      [-Wdeprecated-declarations]
    MD5((unsigned char *) string, length, (unsigned char *) digest.c);
    ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/openssl/md5.h:116:16: note:
      'MD5' has been explicitly marked deprecated here
unsigned char *MD5(const unsigned char *d, size_t n, unsigned char *md) ...
               ^
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:66:
In file included from ./../include/eixx/connect.hpp:37:
In file included from ./../include/eixx/connect/basic_otp_connection.hpp:40:
In file included from ./../include/eixx/connect/transport_otp_connection.hpp:349:
In file included from ./../include/eixx/connect/transport_otp_connection.ipp:34:
In file included from ./../include/eixx/connect/transport_otp_connection_tcp.hpp:209:
./../include/eixx/connect/transport_otp_connection_tcp.ipp:706:5: warning:
      'MD5_Init' is deprecated: first deprecated in OS X 10.7
      [-Wdeprecated-declarations]
    MD5_Init(&c);
    ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/openssl/md5.h:113:5: note:
      'MD5_Init' has been explicitly marked deprecated here
int MD5_Init(MD5_CTX *c) DEPRECATED_IN_MAC_OS_X_VERSION_10_7_AND_LATER;
    ^
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:66:
In file included from ./../include/eixx/connect.hpp:37:
In file included from ./../include/eixx/connect/basic_otp_connection.hpp:40:
In file included from ./../include/eixx/connect/transport_otp_connection.hpp:349:
In file included from ./../include/eixx/connect/transport_otp_connection.ipp:34:
In file included from ./../include/eixx/connect/transport_otp_connection_tcp.hpp:209:
./../include/eixx/connect/transport_otp_connection_tcp.ipp:707:5: warning:
      'MD5_Update' is deprecated: first deprecated in OS X 10.7
      [-Wdeprecated-declarations]
    MD5_Update(&c, (unsigned char *) cookie, (uint32_t) strlen(cookie));
    ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/openssl/md5.h:114:5: note:
      'MD5_Update' has been explicitly marked deprecated here
int MD5_Update(MD5_CTX *c, const void *data, size_t len) DEPRECATED_IN_M...
    ^
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:66:
In file included from ./../include/eixx/connect.hpp:37:
In file included from ./../include/eixx/connect/basic_otp_connection.hpp:40:
In file included from ./../include/eixx/connect/transport_otp_connection.hpp:349:
In file included from ./../include/eixx/connect/transport_otp_connection.ipp:34:
In file included from ./../include/eixx/connect/transport_otp_connection_tcp.hpp:209:
./../include/eixx/connect/transport_otp_connection_tcp.ipp:708:5: warning:
      'MD5_Update' is deprecated: first deprecated in OS X 10.7
      [-Wdeprecated-declarations]
    MD5_Update(&c, (unsigned char *) chbuf,  (uint32_t) strlen(chbuf));
    ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/openssl/md5.h:114:5: note:
      'MD5_Update' has been explicitly marked deprecated here
int MD5_Update(MD5_CTX *c, const void *data, size_t len) DEPRECATED_IN_M...
    ^
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:66:
In file included from ./../include/eixx/connect.hpp:37:
In file included from ./../include/eixx/connect/basic_otp_connection.hpp:40:
In file included from ./../include/eixx/connect/transport_otp_connection.hpp:349:
In file included from ./../include/eixx/connect/transport_otp_connection.ipp:34:
In file included from ./../include/eixx/connect/transport_otp_connection_tcp.hpp:209:
./../include/eixx/connect/transport_otp_connection_tcp.ipp:709:5: warning:
      'MD5_Final' is deprecated: first deprecated in OS X 10.7
      [-Wdeprecated-declarations]
    MD5_Final(digest, &c);
    ^
/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/openssl/md5.h:115:5: note:
      'MD5_Final' has been explicitly marked deprecated here
int MD5_Final(unsigned char *md, MD5_CTX *c) DEPRECATED_IN_MAC_OS_X_VERS...
    ^
test_node.cpp:62:17: error: non-constant-expression cannot be narrowed from type
      'long' to '__darwin_suseconds_t' (aka 'int') in initializer list
      [-Wc++11-narrowing]
                l_binding[N3]->to_long() };
                ^~~~~~~~~~~~~~~~~~~~~~~~
test_node.cpp:62:17: note: override this message by inserting an explicit cast
                l_binding[N3]->to_long() };
                ^~~~~~~~~~~~~~~~~~~~~~~~
                static_cast<__darwin_suseconds_t>( )
test_node.cpp:66:47: warning: format specifies type 'long' but the argument has
      type '__darwin_suseconds_t' (aka 'int') [-Wformat]
            tm.tm_hour, tm.tm_min, tm.tm_sec, tv.tv_usec);
                                              ^~~~~~~~~~
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:66:
In file included from ./../include/eixx/connect.hpp:36:
./../include/eixx/connect/basic_otp_mailbox.hpp:107:5: error: too many template
      parameters in template redeclaration
    template<typename _R, typename... _ArgTypes> friend class std::function;
    ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
test_node.cpp:68:15: note: in instantiation of template class
      'eixx::connect::basic_otp_mailbox<std::__1::allocator<char>,
      std::__1::recursive_mutex>' requested here
        a_mbox.node().stop();
              ^
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/functional:1245:1: note:
      previous template declaration is here
template<class _Fp> class _LIBCPP_TYPE_VIS_ONLY function; // undefined
^~~~~~~~~~~~~~~~~~~
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:66:
In file included from ./../include/eixx/connect.hpp:36:
./../include/eixx/connect/basic_otp_mailbox.hpp:108:77: error: no class named
      '_Function_handler' in namespace 'std'
  ..._R, typename _F, typename... _Args> friend class std::_Function_handler;
                                                      ~~~~~^
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:65:
In file included from ./../include/eixx/eterm.hpp:37:
In file included from ./../include/eixx/marshal/eterm.hpp:45:
In file included from ./../include/eixx/marshal/atom.hpp:37:
/Applications/Xcode.app/Contents/Developer/Toolchains/XcodeDefault.xctoolchain/usr/bin/../include/c++/v1/vector:502:5: error:
      static_assert failed "Allocator::value_type must be same type as
      value_type"
    static_assert((is_same<typename allocator_type::value_type, value_type>::value),
    ^             ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
./../include/eixx/marshal/eterm_format.ipp:63:32: note: in instantiation of
      template class
      'std::__1::vector<eixx::marshal::eterm<std::__1::allocator<char> >,
      std::__1::allocator<char> >' requested here
        struct vector : public std::vector<eterm<Alloc>, Alloc> {
                               ^
./../include/eixx/marshal/eterm_format.ipp:350:23: note: in instantiation of
      template class
      'eixx::marshal::<anonymous>::vector<std::__1::allocator<char> >' requested
      here
        vector<Alloc> v(a_alloc);
                      ^
./../include/eixx/marshal/eterm.ipp:298:16: note: in instantiation of function
      template specialization 'eixx::marshal::eformat<std::__1::allocator<char>
      >' requested here
        return eformat<Alloc>(fmt, pap, a_alloc);
               ^
./../include/eixx/marshal/eterm.ipp:337:18: note: in instantiation of member
      function 'eixx::marshal::eterm<std::__1::allocator<char> >::format'
      requested here
    try { return format(Alloc(), &fmt, &ap); } catch (...) { va_end(ap)...
                 ^
test_node.cpp:38:45: note: in instantiation of member function
      'eixx::marshal::eterm<std::__1::allocator<char> >::format' requested here
    static const eterm s_put_chars = eterm::format("{io_request,_,_,{put...
                                            ^
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:65:
In file included from ./../include/eixx/eterm.hpp:37:
In file included from ./../include/eixx/marshal/eterm.hpp:50:
./../include/eixx/marshal/ref.hpp:199:84: error: invalid use of non-static data
      member 'u'
  ...::memcmp(&m_blob->data()->u, &t.m_blob->data()->u, sizeof(ref_blob::u)) ...
                                                               ~~~~~~~~~~^
./../include/eixx/marshal/eterm.ipp:79:37: note: in instantiation of member
      function 'eixx::marshal::ref<std::__1::allocator<char> >::operator=='
      requested here
        case REF:    return vt.r    == rhs.vt.r;
                                    ^
./../include/eixx/marshal/visit_match.hpp:65:23: note: in instantiation of
      member function 'eixx::marshal::eterm<std::__1::allocator<char>
      >::operator==' requested here
            return et == m_pattern;
                      ^
./../include/eixx/marshal/visit.hpp:50:23: note: in instantiation of function
      template specialization
      'eixx::marshal::visit_eterm_match<std::__1::allocator<char>
      >::operator()<long>' requested here
            : result( v(t1) )
                      ^
./../include/eixx/marshal/eterm.hpp:570:33: note: in instantiation of function
      template specialization 'eixx::marshal::wrap<bool,
      eixx::marshal::visit_eterm_match<std::__1::allocator<char> >
      >::wrap<long>' requested here
            case LONG:   return wrapper(v, vt.i);
                                ^
./../include/eixx/marshal/visit.hpp:66:19: note: in instantiation of function
      template specialization 'eixx::marshal::eterm<std::__1::allocator<char>
      >::visit<eixx::marshal::visit_eterm_match<std::__1::allocator<char> > >'
      requested here
        return et.visit(*static_cast<const Derived*>(this)).result;
                  ^
./../include/eixx/marshal/eterm.ipp:263:22: note: in instantiation of function
      template specialization
      'eixx::marshal::static_visitor<eixx::marshal::visit_eterm_match<std::__1::allocator<char>
      >, bool>::apply_visitor<std::__1::allocator<char> >' requested here
        if (!visitor.apply_visitor(*this))
                     ^
test_node.cpp:41:21: note: in instantiation of member function
      'eixx::marshal::eterm<std::__1::allocator<char> >::match' requested here
    if (s_put_chars.match(a_msg->msg(), &l_binding))
                    ^
In file included from test_node.cpp:2:
In file included from ./../include/eixx/eixx.hpp:65:
In file included from ./../include/eixx/eterm.hpp:37:
In file included from ./../include/eixx/marshal/eterm.hpp:52:
In file included from ./../include/eixx/marshal/list.hpp:356:
./../include/eixx/marshal/list.ipp:55:9: error: 'auto' deduced as 'const
      eixx::marshal::eterm<std::__1::allocator<char> > *' in declaration of 'p'
      and deduced as 'const eixx::marshal::eterm<std::__1::allocator<char> >' in
      declaration of 'end'
    for(auto p = items, *end = items+N; p != end; ++p, ++hd) {
        ^        ~~~~~         ~~~~~~~
./../include/eixx/marshal/list.hpp:146:27: note: in instantiation of member
      function 'eixx::marshal::list<std::__1::allocator<char> >::init' requested
      here
        : base_t(alloc) { init(items, a_size, alloc); }
                          ^
./../include/eixx/marshal/list.hpp:143:11: note: in instantiation of member
      function 'eixx::marshal::list<std::__1::allocator<char> >::list' requested
      here
        : list(items, N, alloc) {}
          ^
./../include/eixx/marshal/list.hpp:245:16: note: in instantiation of function
      template specialization 'eixx::marshal::list<std::__1::allocator<char>
      >::list<1>' requested here
        return list<Alloc>(l, a);
               ^
test_node.cpp:88:15: note: in instantiation of function template specialization
      'eixx::marshal::list<std::__1::allocator<char> >::make<const char *>'
      requested here
        list::make("This is a test string"), &g_io_server->self());
              ^
15 warnings and 7 errors generated.
make[2]: *** [test_node-test_node.o] Error 1
make[1]: *** [all-recursive] Error 1
make: *** [all] Error 2

basic_otp_mailbox never calls handler

eixx/src/test_node.cpp

Lines 168 to 175 in 8b778bd

//otp_connection::connection_type* transport = a_con->transport();
g_io_server->async_receive(on_io,
// IO Request
std::chrono::milliseconds(-1), -1);
//node.send_rpc(self, g_rem_node, atom("shell_default"), atom("ls"),
// list::make(), &g_io_server);
g_main->async_receive(on_msg, std::chrono::seconds(5), -1);

on_msg and on_io is never called even with commit 5c0baa3

error pedantic: ISO C++ forbids zero-size array

We're getting an error when linking to eixx:

/usr/local/opt/[email protected]/include/eixx/marshal/list.hpp:65:30: error: ISO C++ forbids zero-size array 'head' [-Werror=pedantic]
   65 |         cons_t          head[0];
      |                              ^
In file included from /usr/local/opt/[email protected]/include/eixx/marshal/eterm_format.hpp:69,
                 from /usr/local/opt/[email protected]/include/eixx/marshal/eterm.hxx:36,
                 from /usr/local/opt/[email protected]/include/eixx/marshal/eterm.hpp:691,
                 from /usr/local/opt/[email protected]/include/eixx/eterm.hpp:33,
                 from /usr/local/opt/[email protected]/include/eixx/eixx.hpp:61

Compile error

I'm have trouble with compiling project at:

g++ (Ubuntu 4.4.3-4ubuntu5) 4.4.3
Boost 1.46.1
OTP R14B03

First, I had to patch basic_otp_node_local.cpp
line:
s << home << boost::filesystem2::slashstd::string::value << ".erlang.cookie";

was changed to:
s << home << "/.erlang.cookie";

Now, when I try to make project I get:

saleyn-eixx-14aaabb/src$ make
g++ -DPACKAGE_NAME=\"eixx\" -DPACKAGE_TARNAME=\"eixx\" -DPACKAGE_VERSION=\"0.1\" -DPACKAGE_STRING=\"eixx\ 0.1\" -DPACKAGE_BUGREPORT=\"BUG-REPORT-ADDRESS\" -DPACKAGE_URL=\"\" -DPACKAGE=\"eixx\" -DVERSION=\"0.1\" -DSTDC_HEADERS=1 -DHAVE_SYS_TYPES_H=1 -DHAVE_SYS_STAT_H=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_MEMORY_H=1 -DHAVE_STRINGS_H=1 -DHAVE_INTTYPES_H=1 -DHAVE_STDINT_H=1 -DHAVE_UNISTD_H=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DHAVE_BOOST=1 -DHAVE_BOOST_PROPERTY_TREE_PTREE_HPP=1 -DHAVE_BOOST_SYSTEM_ERROR_CODE_HPP=1 -DHAVE_BOOST_THREAD_HPP=1 -DHAVE_BOOST_TEST_UNIT_TEST_HPP=1 -DHAVE_STDLIB_H=1 -DHAVE_STRING_H=1 -DHAVE_SYS_TIME_H=1 -DHAVE__BOOL=1 -DHAVE_STDBOOL_H=1 -DHAVE_GETTIMEOFDAY=1 -DHAVE_SOCKET=1 -I.  -I./../include -pthread -I/usr/lib/erlang/lib/erl_interface-3.7.4/include -I/usr/lib/erlang/lib/erl_interface-3.7.4/src   -MMD -Wall -fno-strict-aliasing -MT test_node-test_node.o -MD -MP -MF .deps/test_node-test_node.Tpo -c -o test_node-test_node.o `test -f 'test_node.cpp' || echo './'`test_node.cpp
In file included from ./../include/eixx/eixx.hpp:65,
                 from test_node.cpp:2:
./../include/eixx/eterm.hpp:56: error: invalid application of ‘sizeof’ to incomplete type ‘boost::STATIC_ASSERTION_FAILURE’ 
In file included from ./../include/eixx/eterm.hpp:36,
                 from ./../include/eixx/eixx.hpp:65,
                 from test_node.cpp:2:
./../include/eixx/marshal/eterm.hpp: In copy constructor ‘eixx::marshal::eterm::eterm(const eixx::marshal::eterm&) [with Alloc = std::allocator]’:
test_node.cpp:53:   instantiated from here
./../include/eixx/marshal/eterm.hpp:242: error: invalid application of ‘sizeof’ to incomplete type ‘boost::STATIC_ASSERTION_FAILURE’ 
./../include/eixx/marshal/eterm.hpp:242: error: invalid application of ‘sizeof’ to incomplete type ‘boost::STATIC_ASSERTION_FAILURE’ 
In file included from ./../include/eixx/marshal/eterm.hpp:51,
                 from ./../include/eixx/eterm.hpp:36,
                 from ./../include/eixx/eixx.hpp:65,
                 from test_node.cpp:2:
./../include/eixx/marshal/trace.hpp: In member function ‘void eixx::marshal::trace::check_clock(uint32_t&) [with Alloc = std::allocator]’:
./../include/eixx/marshal/trace.hpp:159:   instantiated from ‘static eixx::marshal::trace* eixx::marshal::trace::tracer(eixx::marshal::trace_op, const eixx::marshal::trace*) [with Alloc = std::allocator]’
./../include/eixx/connect/transport_msg.hpp:227:   instantiated from ‘void eixx::connect::transport_msg::set_send(const eixx::marshal::epid&, const eixx::marshal::eterm&, const Alloc&) [with Alloc = std::allocator]’
./../include/eixx/connect/basic_otp_node.ipp:194:   instantiated from ‘void eixx::connect::basic_otp_node::send(const eixx::marshal::atom&, const eixx::marshal::epid&, const eixx::marshal::eterm&) [with Alloc = std::allocator, Mutex = boost::recursive_mutex]’
test_node.cpp:62:   instantiated from here
./../include/eixx/marshal/trace.hpp:63: warning: comparison between signed and unsigned integer expressions
./../include/eixx/util/async_wait_timeout.hpp: At global scope:
./../include/eixx/util/async_wait_timeout.hpp:34: warning: ‘boost::asio::error::timer_category’ defined but not used
make: *** [test_node-test_node.o] Błąd 1

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.