Brash v1.1.35 Release Notes

30-Mar-2016: Updated

Brash Issues:

Needed Brash Enhancements and Caveats:

Source code Changes

The Visual Studio 2015 compiler no longer accepts class members which are mutable references. Apparently, this is a language standards change that they adopted. The CXXTLS_FOREACH macro was taking advantage of this erstwhile feature -- as did BOOST_FOREACH, I believe.

Luckily, VS 2015 now supports the new for syntax which acts roughly like foreach in other languages. This made it possible to make a trivial change to the definition of CXXTLS_FOREACH such that it continues to work as before except for one caveat:

It is no longer possible to declare a loop variable outside the CXXTLS_FOREACH block. That, this used to work:
string word;
CXXTLS_FOREACH(word, someVectorOfString)
In my opinion, this change is unfortunate due to the new inefficiency that will result in the event that the loop variable needs to be used after the loop terminates.

A second change in the compiler seems more like a compiler bug than a new feature of the language but I may be mistaken. Previously, it was possible to declare multiple function with the following parameters:

void function( Someclass const &description,
               char const * const * argv_ptr,
               char const * const * environ_ptr,
               bool flag=true
void function( std::string const &description,
               char const * const * argv_ptr,
               char const * const * environ_ptr,
               bool flag=true
This code no longer compiles. Apparently, the visual studio compiler gets confused about overload resolution.


Luckily, a void const * can be used in place of the complex pointer declarations, above, and the function bodies can then cast the incoming void const pointers to the proper type and go on its merry way.

The above problems caused several files to change slightly:

The file, cxx/brash/brashBuiltins.cxx, also changed due to additional compiler warnings which required minor adjustments.