Bitcoin full node and query server

April 2018

Archive of the libbitcoin Slack #general channel.

Monday, April 2, 2018

James C.11:50
The Web Log of Aaron Jaramillo
Today I’m going to briefly go over a Libbitcoin example requested by a reader. This tutorial will utilize libbitcoin-client’s subscribe_address function to watch for realtime updates on an addresse…
evoskuil11:53
Nice
N
narodnik19:58
they make it sound overly complicated when its not
im going to write an api for it
I just have one missing piece, which is how can we do ring signatures?
like borromean ring signatures
👍 1
neillm20:25
Interesting, will have to read up on this

Tuesday, April 3, 2018

N
narodnik14:20
remember for the range proof, you have a set of points (C1, C2, ..., C8) where C1 = 1 or 0, C2 = 2 or 0, ... C8 = 8 or 0, so that when you add up those points, you get another point D that it's value is the sum of those points or (v1 + v2 + v3 ...) G so you know it's in range
to prove something is either 2 or 0, you need ring signatures because they have the property that you know the signature came from a set of keys, but you don't know which key, so a signature is provided proving that the value is either 0 (using public key derived from first equation) or 2 (using public key derived from second equation) but you don't know which key specifically, just that it's either of them.
🤔 1👍 1
7 replies · James C., neillm · last Apr 06, 2018
James C.14:19
Got it now. That's a lot of ring signatures, one for each of the 64 on/off "bit" pairs which together represent a single committed input/output/fee value. wow ... I see the need for compact bulletproofs more than before 🙂
James C.14:32
Q' tho: I dont understand how amounts are kept consistent between transactions. Since all hidden, with a different blinding factor for every tx, how do I know how much was actually previously sent to me? I need to know the prev. blinding factor + amount of the prev. tx, right?
neillm17:00
I'm new to this so may have it all wrong, but I think the blinding factor is still your priv key, and the tx output is just like any other tx. the difference is that the amount is encoded via the ring, and determining the amount relies on you checking every bit in the range to determine the final amount using the provided commitment and your priv key
neillm17:05
Not sure, really need to read up more
👍 1
neillm17:34
This is definitely incorrect, skimming more material now. Sorry @James C., can't help at the moment
👍 1
James C.19:51
Hi @neillm, from what I understand, each confidential tx will have individual input, output, fee amounts all individually commited as Cin, Cout, Cfee. For all of them to sum up to 0, the blinding factor for a given transaction has to be consistent for all commitments, and provably non-negative amounts via Ring Signatures. So I don't quite get how a given hidden output amount makes it into the next spending transaction as the new hidden input amount, since the two transactions (prev vs spending) will likely have different blinding factors...
(edited)
neillm00:50
Does anyone know if the secp256k1-zkp fork will be merged upstream? Shaping an API around the existing might be a good idea, for example: https://github.com/ElementsProject/secp256k1-zkp/pull/16/commits/2a89dbc89c58319ea6facd2a0e5835570d22db04
GitHub
Based on rebase of strauss-multiexp from upstream onto -zkp TODO rangeproof aggregation TODO const time proving TODO pippenger support TODO 48-bit (and generally non-power-of-2) rangeproofs and agg...
James C.20:32
Awesome, i need to read up on this tomorrow, thanks for the link @narodnik!
Script verification & fork rule documentation sections are drafted: https://github.com/libbitcoin/libbitcoin/wiki/Script-Verification https://github.com/libbitcoin/libbitcoin/wiki/Fork-Rules As always, feedback/corrections welcome!
(edited)

Wednesday, April 4, 2018

evoskuil23:49
in the block version field
strike this, not true
The ability selectively support specific soft forks gives Libbitcoin the greater flexibility to support various chains.
The primary benefit is to not require that we are not telling customers what forks to accept, also it allows for flexibility in simulation and testing.
(edited)
👍 1
We don't use the term "unlocking script" - that's from Andreas' book. We use "input script" and "output script".
We also don't use redeem script but instead "embedded" script. The other terms in use all suffer strong ambiguity.
2 replies · James C., evoskuil · last Apr 05, 2018
James C.13:47
I will update this in previous P2SH(P2SH/P2WPKH) sections as well.
evoskuil17:10
K, generally if you go with the terms (including allowed symbol abbreviations) you will be good. I put a lot of thought into taxonomy.
👍 1
evoskuil23:56
Avoid abbreviations: "prev_output_amount", use "prevout" (a name we accept for previous outputs) or "previous_output_amount", or in this case just "amount".
👍 1
Avoid abbreviations: "no_sig_input_operations", use "no_signature_input_operations", "unsigned_input_ops" (op is an accepted name), or just "ops".
👍 1
Use auto: code ec; witness empty_witness; ec = script::verify(... witness empty_witness; auto ec = script::verify(...
👍 1

Thursday, April 5, 2018

evoskuil00:03
Create signature & witness.
Avoid & in comment, just use "and".
James C.06:22
Got it! thanks for review eric, will make changes later today.
evoskuil06:55
NP, actually strike all of this: "sequence in the block version field, with each of the first 29 bits each representing support for a given BIP." (not in block version field, not 29 bits, not limited to BIPs).
4 replies · James C., evoskuil · last Apr 05, 2018
James C.11:26
This was a mental error of mine. I somehow thought Libbitcoin used the same bits in the rule_fork enum as used in the signalling during BIP activation. I now realise this is not true, bip112/113 used bit 0 for signalling, but occupy bits 9 and 10 in Libbitcoin, for example.
James C.11:28
Just wondering: In the rule_fork object, is the bit assignment per rule in the exact order of historic network majority adoption (save for test/regnet)?
(edited)
evoskuil11:45
The order is unimportant though apart from the first two may reflect historical adoption.
👍 1
evoskuil11:46
Some forks are not signaled at all, so there is truly no relation to signaling.
👍 1
evoskuil06:59
Bitcoin soft fork rule support The rule_fork argument tells the script interpreter which Bitcoin soft fork rules
The rule forks are not limited to soft forks (e.g. testnet, regtest, bip90).
(edited)
👍 1
evoskuil07:05
It seems like in this comment you are referring to the process of miner (and other) signaling/activation. If so that will greatly confuse the explanation.
Bitcoin soft fork rule support are signalled with a 32-bit sequence in the block version field, with each of the first 29 bits each representing support for a given BIP.
This topic is narrow, explaining only the verify() command and the effect of forks on it. The effect of signaling and activation is not felt until you start working with libbitcoin-blockchain.
👍 1
evoskuil07:46
Missing auto opportunities, e.g.: script multisig_script = script::to_pay_multisig_pattern(signatures, points); short_hash multisig_script_hash = bitcoin_short_hash(multisig_script.to_data(false)); script p2sh_multisig_script = script::to_pay_script_hash_pattern(multisig_script_hash); auto multisig_script = script::to_pay_multisig_pattern(signatures, points); auto multisig_script_hash = bitcoin_short_hash(multisig_script.to_data(false)); auto p2sh_multisig_script = script::to_pay_script_hash_pattern(multisig_script_hash);
Look into c++11 list initialization: operation::list sig_input_operations; sig_input_operations.push_back(operation(opcode::push_size_0)); sig_input_operations.push_back(operation(sig0)); sig_input_operations.push_back(operation(sig1)); sig_input_operations.push_back(operation(multisig_script.to_data(false))); http://en.cppreference.com/w/cpp/language/list_initialization
👍 1
evoskuil07:57
Use script::verify(p2sh_transaction, 0, vs. script::verify(p2sh_transaction, 0u, in cases where the default constant will not produce an ambiguity.
(edited)
evoskuil08:02
This is fine for v4 but will not work properly in v3: uint32_t my_fork_rules = rule_fork::all_rules ^ rule_fork::bip16_rule; since not all Bitcoin rules are true by default. Testnet is a positive rule in v3 (changed in v4 for this reason).
3 replies · James C., evoskuil · last Apr 06, 2018
James C.23:27
Hi Eric, sorry I don't quite follow. What do you mean with default? I see the rule - bit assignment has changed between ver3 and master, but on both branches all_rules = 0xffffffff. I also don't see negative testnet rule on master, eg testnet_bit = 0 to activate testnet ... are these planned changes?
evoskuil01:03
All rules would include testnet.
James C.07:39
👍
evoskuil08:18
Not sure about this comment:
// Prints success (Bitcoin:0)
std::cout << ec << std::endl;
This should just print 0. But you should also use ec.message().
(edited)
evoskuil08:37
I'm not so clear on your use of "on stack" and "off stack".
I think it would be better to use the terminology of the (virtual) machine implementation. Better yet, create a topic to explain the operation of the machine.
7 replies · James C., evoskuil, Slackbot · last Apr 05, 2018
James C.19:28
machine chapter would be cool, will do!
evoskuil19:30
It's best to think of it as a virtual machine that has a program environment that is initialized with certain state and an interpreter that evaluates the program.
James C.19:48
This is cool stuff! i noticed the program class has both script pointer & stack state in it. i need to dig thru how the stack(s) is affected by interpreter step by step... I couldn't figure out previously, why the input script is evaluated separately from the output script, even though the input script end-state is carried over to the output script program ... https://github.com/libbitcoin/libbitcoin/blob/master/src/chain/script.cpp#L1387-L1395
(edited)
evoskuil19:50
It used to work that way but satoshi had to split them due to a vulnerability.
Slackbot19:50
👻
James C.19:51
wow 🙂
James C.20:03
Found it, pushdata opcode at end of input script will render the output script into a single constant, evaluating to true.
evoskuil08:39
Sorry about the haphazard and slow replies, I can't keep up with your prodigious output 🙂, especially when I've been traveling.
(edited)
👍 1

Wednesday, April 11, 2018

James C.22:10
Here is a more detailed documentation section on the script machine as suggested by Eric: https://github.com/libbitcoin/libbitcoin/wiki/Script-Machine It's a little long. Comments very welcome as always. Next: revise previous script verification chapters for consistency, update with ver4 new script::verify() signature
GitHub
libbitcoin - Bitcoin Cross-Platform C++ Development Toolkit
evoskuil22:22
👍

Monday, April 16, 2018

haarts09:46
hi all
I'm helping out on making libbitcoin bindings in Python and integrating that into Electrum.
🎉 2😄 1
I'll prob be asking a bunch of silly questions sooner or later.
I'll try to keep it at a minimum
lclc09:56
I see the future where one libbitcoin-server binary can be used to power X different coins as Electrum backend on one server :))
Revive13:31
GitHub
python-libbitcoin - Libbitcoin Python Interface [contributed library, not maintained].
haarts13:33
Yeah, I've been studying that today.
I leaning toward using that code as inspiration but I'm not going to use it or rework it.
It does way more than implementing the Query interface and depends on a ffi call.
I haven't tried to make it run tbh
GitHub
python-libbitcoin - Libbitcoin Python Interface [contributed library, not maintained].
Nor do I think this is quite necessary.
But I could be wrong. I've been so often in the past.
GitHub
python-libbitcoin - Libbitcoin Python Interface [contributed library, not maintained].
I'm not sure if I'll need that
lclc13:53
Probably a good idea as libbitcoin-c is also not maintained
haarts13:56
that part def seems due an overhaul.
but the lib in general makes a good impression on me. a bit convoluted perhaps but Ive only spent a little time with it
idk
(edited)
neillm13:57
If anyone is familiar with SWIG, there are stubs for python binding generation. It would be nice if it could be automated somehow to avoid the rot. But that's about as far as I got on that (i.e. can't help much there)
haarts13:58
OT had SWIG bindings iirc. Can't say I have warm feelings for that.
neillm13:59
I guess I'd have to see the downsides, not sure. Seems to beat requiring a maintainer, particularly on things like master that change quite frequently. And also have the ability to generate multiple language bindings at the same time if done correctly.
I could imagine the bindings are not as friendly as a handmade api though
Boost also provides binding generators. Maybe that's the way to go?
haarts14:02
OT indeed wasn't the post child of proper code, that certainly colors my exp with SWIG
neillm14:02
That said, the problems you see with the C and python bindings that exist now will likely forever be a problem. It's not a bad short term solution though, particularly if it's updated and locked to a fixed version (e.g. version3)
neillm14:07
Not to discourage your work in this area. Was just hoping to revive the generated binding route 🙂
haarts14:08
I'd be wiling to look into it
but then I need to confer with @lclc prob.
neillm14:08
I'm happy to assist, but it's been a while since I looked at it as well
Ah, ok, whatever works
haarts14:09
this week I'm starting up with 1 day, and maybe a bit more. Next week I'll be at it 4d/w.
I am curious how hard/easy SWIG is
neillm14:10
Great, welcome aboard!
haarts14:10
and what quality binding they generate.
thanks a bunch!
(love the '90 website SWIG has going on: http://swig.org/)
neillm14:11
Heh, yeah. I suggest it because SWIG stubs are in place (but apparently not working). Maybe it's the most straight-forward way to go. That said, I have personally used Boost generated python bindings and found them decent to work with, but not SWIG.
haarts14:15
the discussion on whether or not to explore the generation of bindings seems a rather fundamental one. one for which I feel I'm ill suited to make a useful contribution at this point. Should we explore this route? Who are the ppl to decide this?
neillm14:17
Generally, I think pull requests are what's decided on 🙂 I am just pointing out that both routes have been approached, but neither work in the ideal sense yet
haarts14:20
I'm building a lot of background today!
lclc14:47
As we don’t need the full libbitcoin library but only the communications part for the Electrum wallet it’s probably an overkill
My SWIG experience is also back from the OpenTransaction days, so not so great
neillm14:48
Ah, so python to speak zmq directly mostly?
lclc14:49
Yes. The Bitcoin-related stuff is done by Electrum
neillm14:49
Ok, then yes, certainly overkill 😉
Maybe along those lines. Not sure if that helps with what you need
haarts14:52
that certainly helps
neillm14:53
👍
haarts14:56
interesting that you use a DEALER socket
neillm14:58
how so?
haarts15:02
from the wiki I gathered a simple REQ/RESP would do
but I need to brush up on my 0mq
I'm loving this!
neillm15:04
Sure, I'm not an expert either. The obelisk client uses dealer to speak to the service's router, so I think it's an analogue.
I agree a number of models may work
evoskuil17:27
Either requester or dealer works, the decision is based on client requirements.
(edited)
We have someone working on SWIG. The issues are non-trivial but the work is very important.
neillm17:28
👍
evoskuil17:28
I agree that SWIG is way overkill for the client server interface.
The Electrum scenario requires a change to the server’s address indexation which I have discussed with ThomasV and his dev. We are committed to making these changes.

Tuesday, April 17, 2018

N
narodnik17:17
hello everyone with new OS install I am getting configure syntax errors for icu and png
qrencode too
evoskuil17:18
Updated autotools?
N
narodnik17:18
yes brand new latest ubuntu
ohh sorry
I need to install pkgconfig
evoskuil17:19
👍
N
narodnik17:19
ok now everythings working thanks
neillm17:19
👍

Friday, April 27, 2018

neillm18:02
Here's a short link for inviting anyone to this slack: https://bit.ly/2r3KVSm
@neillm pinned a message to this channel.18:02
neillm18:02
I always have to look that up, so I'm pinning it here for future reference
M
Mlmikael18:05
Hi all 🙂
neillm18:06
@Mlmikael Greetings!
evoskuil18:07
Hidey ho neighbor.

Sunday, April 29, 2018

M
Mlmikael13:05
Hi, i'll post some stuff from attempting to compile LibBitcoin repo libbitcoin, branch version3, commit 55f0c59421b43bb8c756431da53a28daf95dd0fa (= latest). ./autogen.sh - works CC=/usr/local/bin/egcc \ CXX=/usr/local/bin/eg++ \ CFLAGS="-Og -g -fstack-protector-all" \ CXXFLAGS="-std=c++11 -Og -g -fstack-protector-all" \ PKG_CONFIG_PATH="$LIBBITCOIN_BUILD/lib/pkgconfig" \ ./configure --prefix=$LIBBITCOIN_BUILD \ --exec-prefix=$LIBBITCOIN_BUILD \ --with-icu \ --with-png \ --with-qrencode - works. gmake -j1 V=1 - on this OpenBSD 6.2 with GCC 4.9.4 (as egcc/eg++), the compilation failed with std:align not being implemented. talking to people deep in the Gnu GCC/LibBoost toolchain, they highlighted that adding " -DBOOST_NO_CXX11_STD_ALIGN" to CXXFLAGS would trig Boost's mitigation for GCC versions below 5.1.0, to not use std:align when in C++11x, as std:align was implemented first in GCC 5.1.0.
that worked in that we now instead get this error: libtool: compile: /usr/local/bin/eg++ -DPACKAGE_NAME=\"libbitcoin\" -DPACKAGE_TARNAME=\"libbitcoin\" -DPACKAGE_VERSION=\"3.4.0\" "-DPACKAGE_STRING=\"libbitcoin 3.4.0\"" -DPACKAGE_BUGREPORT=\"eric@voskuil.org\" -DPACKAGE_URL=\"\" -DPACKAGE=\"libbitcoin\" -DVERSION=\"3.4.0\" -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 -D__EXTENSIONS__=1 -D_ALL_SOURCE=1 -D_GNU_SOURCE=1 -D_POSIX_PTHREAD_SEMANTICS=1 -D_TANDEM_SOURCE=1 -DHAVE_DLFCN_H=1 -DLT_OBJDIR=\".libs/\" -DHAVE_CXX11=1 -DBOOST_HAS_ICU=1 -DNDEBUG=1 -DBOOST_ALL_DYN_LINK=1 "-DHAVE_BOOST=/**/" "-DHAVE_BOOST_CHRONO=/**/" "-DHAVE_BOOST_DATE_TIME=/**/" "-DHAVE_BOOST_FILESYSTEM=/**/" "-DHAVE_BOOST_IOSTREAMS=/**/" "-DHAVE_BOOST_LOCALE=/**/" "-DHAVE_BOOST_LOG=/**/" "-DHAVE_BOOST_PROGRAM_OPTIONS=/**/" "-DHAVE_BOOST_REGEX=/**/" "-DHAVE_BOOST_SYSTEM=/**/" "-DHAVE_BOOST_THREAD=/**/" "-DHAVE_BOOST_UNIT_TEST_FRAMEWORK=/**/" -DHAVE_PTHREAD_PRIO_INHERIT=1 -I. -I./include -DWITH_ICU -DWITH_PNG -DWITH_QRENCODE -I/usr/local/include -I/usr/local/include -I/usr/local/include/libpng16 -I/usr/local/include -I/home/phil/make_libbitcoin_work_with_boost_1.58.0/build/include -std=c++11 -Og -g -fstack-protector-all -DBOOST_NO_CXX11_STD_ALIGN -std=c++11 -Wno-deprecated-declarations -Wno-missing-braces -fvisibility-inlines-hidden -fno-var-tracking-assignments -MT src/chain/src_libbitcoin_la-compact.lo -MD -MP -MF src/chain/.deps/src_libbitcoin_la-compact.Tpo -c src/chain/compact.cpp -fPIC -DPIC -o src/chain/.libs/src_libbitcoin_la-compact.o src/chain/compact.cpp: In static member function 'static uint32_t libbitcoin::chain::compact::from_big(const uint256_t&)': src/chain/compact.cpp:166:34: error: invalid static_cast from type 'const uint256_t {aka const boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<256u, 256u, (boost::multiprecision::cpp_integer_type)0u, (boost::multiprecision::cpp_int_check_type)0u, void> >}' to type 'uint64_t {aka long long unsigned int}' static_cast<uint64_t>(big) << shift_low(exponent) : ^ src/chain/compact.cpp:167:58: error: invalid static_cast from type 'boost::enable_if_c<true, boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<256u, 256u, (boost::multiprecision::cpp_integer_type)0u, (boost::multiprecision::cpp_int_check_type)0u, void> > >::type {aka boost::multiprecision::number<boost::multiprecision::backends::cpp_int_backend<256u, 256u, (boost::multiprecision::cpp_integer_type)0u, (boost::multiprecision::cpp_int_check_type)0u, void> >}' to type 'uint64_t {aka long long unsigned int}' static_cast<uint64_t>(big >> shift_high(exponent)); ^ gmake: *** [Makefile:2977: src/chain/src_libbitcoin_la-compact.lo] Error 1
here, the big argument is an uint256_t (https://github.com/libbitcoin/libbitcoin/blob/version3/src/chain/compact.cpp#L159) and we're doing static_cast<uint64_t>(big) . and that gives a crash and burn. if you have any thoughts on this one let me know. now, going forward, we may just end up with attempting to use GCC 6 and LibBoost 1.66.0, as we have that at hand.
GitHub
libbitcoin - Bitcoin Cross-Platform C++ Development Toolkit
M
Mlmikael13:38
https://github.com/libbitcoin/libbitcoin/blob/version3/src/chain/compact.cpp#L166 - the C++ people I talk to seem to say that using a static cast here is bad coding practice,
GitHub
libbitcoin - Bitcoin Cross-Platform C++ Development Toolkit
because the code does not reflect which of Boost's representations of that 256bit value it is you want to use, they say.
also comments, "For example 0x12345678 will actually be 0x78563412 because of "Endien-ness" now what about a union of two shorts?"
evoskuil15:40
If you have a failure condition for the cast please provide a failing test case and fix pull request. The above is not a problem as far as I can tell, as the cast merely invokes the uint64_t conversion method of the class.
M
Mlmikael15:43
Aha, if I would have any followup on that one i'd let you know. In all cases it should not be an issue on my side.
So did some more learning over here. OpenBSD 6.2's Boost port which is Boost 1.58.0, was built using GCC 4.2.1. OpenBSD 6.3's Boost port which is Boost 1.66.0, is built using GCC 4.9.4. this was effectuated by the older port's Makefile not having any COMPILER line, whereas the new one has a COMPILER line which contains "ports-gcc", https://man.openbsd.org/bsd.port.mk#COMPILER .
evoskuil15:47
In my experience it is best to build boost for the build of libbitcoin, into a prefix dir, using the same compiler, preferably using the install.sh.
Packaged boost errors are very common due to this sort of mismatch.
M
Mlmikael16:22
prefix dir - yes!
we just had a boost build success here with 4.9.4 yey.
in 20 hours i'll continue with new attempt to build LibBitcoin.
evoskuil16:23
If you don't use a prefix dir you are mixing your boost build with previously-installed boost turds.
M
Mlmikael16:24
<lazy>if any particular argument is used to specify to LibBitcoin which LibBoost path to use, feel free to remind me however i will presume it's done via PKGCONFIG, </lazy> will dig into and figure tmrw!
evoskuil16:24
And even so you need to make sure that the libbitcoin build uses the boost build in the prefix dir (which the installer does).
M
Mlmikael16:24
right exactly, prefix is essential to hygiene.
evoskuil16:24
There's a little more to it than that, see install.sh
M
Mlmikael16:24
i think i should put Boost in a separate directory structure from the libsecp256k1 + the libboost-* repos
ok! neat. will do tmrw.
evoskuil16:25
Also, the cast issue above is not a problem. The missing cast indicates only that the cast does not exist, not that it's invalid.
In a BE vs. LE machine it is required that byte order be different.
The commetor seems to think we have a dependency on the byte order as a result of the cast, which is in incorrect assumption.
M
Mlmikael16:27
aha great, thanks for pointing out.
evoskuil16:28
Now if you were to cast a simple byte buffer into an integer that would be a different issue, but it is expected that the uint256_t cast to uint64_t produces the correct byte ordering, as otherwise the cast implementation is simply broken.
M
Mlmikael16:34
by the way, a curious thing about Boost 1.58.0 on OpenBSD: the 1.58.0 port specified a special user.hpp file (found here: https://cvsweb.openbsd.org/cgi-bin/cvsweb/ports/devel/boost/files/Attic/user.hpp?rev=1.6&content-type=text/x-cvsweb-markup), which defined BOOST_NO_CONFIG . this apparently is a really hard setting in Boost, it switches off all of Boost's built-in compiler lack-of-feature mitigations. here is its motivation: // define this to disable all config options, // excluding the user config. Use if your // setup is fully ISO complient, and has no // useful extentions, or for autoconf generated // setups: #ifndef BOOST_NO_CONFIG # define BOOST_NO_CONFIG #endif in OpenBSD 6.3 = Boost 1.66.0, the whole user.hpp thing is history and there is hence also no more BOOST_NO_CONFIG but Boost's built in facilities are relied on. one more interesting thing which may not be correct, is that very competent Redi on #gcc told me that Boost should NOT be compiled with "-std=c++11", as Boost itself manages language standards perfectly. i wonder actually if he was right on that one, as https://gcc.gnu.org/wiki/Cxx11AbiCompatibility does specify that there are some incompatibilities between language standards, even if indeed they are rare.
cvsweb.openbsd.org
OpenBSD source via CVSweb
evoskuil16:44
It cannot hurt to use the correct compiler.