In working through cross-compilation issues with boost, particularly the
filesystem library, I discovered the following error reproduced with the
following test case with both boost 1.34.1 and 1.35.0:
FAILS:
echo "#include \nint main (void) { return (0);
}" | g++ -o test -I/${BuildRoot}/results/boost/include -Werror -Wall
-Wshadow -x c++ -
PASSES:
echo "#include \nint main (void) { return (0);
}" | g++ -o test -I/usr/include -Werror -Wall -Wshadow -x c++ -
The failing case complains about 'what', 'path1' and 'path2' argument
shadowing in boost/filesystem/path.hpp with respect to like-named member
functions.
Since GCC does not enforce warning options on headers in /usr/include, this
only shows up when building against a boost installation outside
/usr/include, as in the above failure example.
The patch to address this is:
Signed-off-by: Grant Erickson
---
--- boost_1_35_0/boost/filesystem/path.hpp 2008-07-30 16:54:53.000000000
-0700
+++ boost_1_35_0/boost/filesystem/path.hpp.N 2008-07-30
16:59:42.000000000 -0700
@@ -577,23 +577,23 @@
// BOOST_FILESYSTEM_DECL version works for VC++ but not GCC. Go
figure!
inline
const char * what( const char * sys_err_what,
- const path & path1, const path & path2, std::string & target )
+ const path & path1_arg, const path & path2_arg, std::string &
target )
{
try
{
if ( target.empty() )
{
target = sys_err_what;
- if ( !path1.empty() )
+ if ( !path1_arg.empty() )
{
target += ": \"";
- target += path1.file_string();
+ target += path1_arg.file_string();
target += "\"";
}
- if ( !path2.empty() )
+ if ( !path2_arg.empty() )
{
target += ", \"";
- target += path2.file_string();
+ target += path2_arg.file_string();
target += "\"";
}
}
@@ -607,7 +607,7 @@
template<class Path>
const char * what( const char * sys_err_what,
- const Path & /*path1*/, const Path & /*path2*/, std::string &
/*target*/ )
+ const Path & /*path1_arg*/, const Path & /*path2_arg*/, std::string
& /*target*/ )
{
return sys_err_what;
}
@@ -624,14 +624,14 @@
typedef Path path_type;
- basic_filesystem_error( const std::string & what,
+ basic_filesystem_error( const std::string & what_arg,
system::error_code ec );
- basic_filesystem_error( const std::string & what,
- const path_type & path1, system::error_code ec );
+ basic_filesystem_error( const std::string & what_arg,
+ const path_type & path1_arg, system::error_code ec );
- basic_filesystem_error( const std::string & what, const path_type &
path1,
- const path_type & path2, system::error_code ec );
+ basic_filesystem_error( const std::string & what_arg, const path_type
& path1_arg,
+ const path_type & path2_arg, system::error_code ec );
~basic_filesystem_error() throw() {}
@@ -1385,8 +1385,8 @@
template<class Path>
basic_filesystem_error<Path>::basic_filesystem_error(
- const std::string & what, system::error_code ec )
- : system::system_error(ec, what)
+ const std::string & what_arg, system::error_code ec )
+ : system::system_error(ec, what_arg)
{
try
{
@@ -1397,29 +1397,29 @@
template<class Path>
basic_filesystem_error<Path>::basic_filesystem_error(
- const std::string & what, const path_type & path1,
+ const std::string & what_arg, const path_type & path1_arg,
system::error_code ec )
- : system::system_error(ec, what)
+ : system::system_error(ec, what_arg)
{
try
{
m_imp_ptr.reset( new m_imp );
- m_imp_ptr->m_path1 = path1;
+ m_imp_ptr->m_path1 = path1_arg;
}
catch (...) { m_imp_ptr.reset(); }
}
template<class Path>
basic_filesystem_error<Path>::basic_filesystem_error(
- const std::string & what, const path_type & path1,
- const path_type & path2, system::error_code ec )
- : system::system_error(ec, what)
+ const std::string & what_arg, const path_type & path1_arg,
+ const path_type & path2_arg, system::error_code ec )
+ : system::system_error(ec, what_arg)
{
try
{
m_imp_ptr.reset( new m_imp );
- m_imp_ptr->m_path1 = path1;
- m_imp_ptr->m_path2 = path2;
+ m_imp_ptr->m_path1 = path1_arg;
+ m_imp_ptr->m_path2 = path2_arg;
}
catch (...) { m_imp_ptr.reset(); }
}
---