Boost logo

Boost-Commit :

Subject: [Boost-commit] svn:boost r64143 - in sandbox/numeric_bindings: boost/numeric/bindings/detail/config boost/numeric/bindings/lapack/detail boost/numeric/bindings/lapack/driver boost/numeric/bindings/traits libs/numeric/bindings/doc/lapack/driver libs/numeric/bindings/lapack/test libs/numeric/bindings/tools
From: thomas.klimpel_at_[hidden]
Date: 2010-07-18 19:24:37


Author: klimpel
Date: 2010-07-18 19:24:35 EDT (Sun, 18 Jul 2010)
New Revision: 64143
URL: http://svn.boost.org/trac/boost/changeset/64143

Log:
tested and fixed "SORT" functionality of gees (in order to have a test for the type of logical_t).
-> changed definition of logical_t
-> changed external_t* to external_fp
Text files modified:
   sandbox/numeric_bindings/boost/numeric/bindings/detail/config/fortran.hpp | 18 +++
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/detail/lapack.h | 32 +++---
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gees.hpp | 80 +++++++++---------
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/geesx.hpp | 80 +++++++++---------
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gges.hpp | 176 ++++++++++++++++++++--------------------
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ggesx.hpp | 176 ++++++++++++++++++++--------------------
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ggevx.hpp | 20 ++--
   sandbox/numeric_bindings/boost/numeric/bindings/traits/type.h | 15 ---
   sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/driver/gees.qbk | 4
   sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/driver/geesx.qbk | 4
   sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/driver/gges.qbk | 4
   sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/driver/ggesx.qbk | 4
   sandbox/numeric_bindings/libs/numeric/bindings/lapack/test/hseqr.cpp | 2
   sandbox/numeric_bindings/libs/numeric/bindings/lapack/test/ublas_gees.cpp | 50 +++++++++--
   sandbox/numeric_bindings/libs/numeric/bindings/tools/netlib.py | 11 +
   15 files changed, 355 insertions(+), 321 deletions(-)

Modified: sandbox/numeric_bindings/boost/numeric/bindings/detail/config/fortran.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/detail/config/fortran.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/detail/config/fortran.hpp 2010-07-18 19:24:35 EDT (Sun, 18 Jul 2010)
@@ -57,9 +57,23 @@
 // Most fortran compilers use fortran_int_t := int by default, so we follow
 // this default, even so f2c (=clapack) uses "typedef long int integer;"
 #ifndef BIND_FORTRAN_INTEGER_8
- typedef int fortran_int_t;
+typedef int fortran_int_t;
 #else
- typedef std::ptrdiff_t fortran_int_t;
+typedef std::ptrdiff_t fortran_int_t;
 #endif
 
+// Looks like fortran_int_t and logical_t should be identical, the unsigned is
+// required so overloads can distinguish between logical_t and fortran_int_t.
+#ifndef BIND_FORTRAN_INTEGER_8
+typedef unsigned int logical_t;
+#else
+typedef std::size_t logical_t;
+#endif
+
+// This definition of external_fp is identical to the definition of L_fp from
+// f2c, and it seems to work more or less. These functions return logical_t,
+// but they don't all take the same type of arguments. A reinterpret_cast will
+// probably work for most compilers to extend the allowed function signatures.
+typedef logical_t (*external_fp)(...);
+
 #endif // BOOST_NUMERIC_BINDINGS_TRAITS_FORTRAN_H

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/detail/lapack.h
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/detail/lapack.h (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/detail/lapack.h 2010-07-18 19:24:35 EDT (Sun, 18 Jul 2010)
@@ -2456,28 +2456,28 @@
 
 // Value-type variants of gges
 void LAPACK_SGGES( const char* jobvsl, const char* jobvsr, const char* sort,
- external_t* selctg, const fortran_int_t* n, float* a,
+ external_fp selctg, const fortran_int_t* n, float* a,
         const fortran_int_t* lda, float* b, const fortran_int_t* ldb,
         fortran_int_t* sdim, float* alphar, float* alphai, float* beta,
         float* vsl, const fortran_int_t* ldvsl, float* vsr,
         const fortran_int_t* ldvsr, float* work, const fortran_int_t* lwork,
         logical_t* bwork, fortran_int_t* info );
 void LAPACK_DGGES( const char* jobvsl, const char* jobvsr, const char* sort,
- external_t* selctg, const fortran_int_t* n, double* a,
+ external_fp selctg, const fortran_int_t* n, double* a,
         const fortran_int_t* lda, double* b, const fortran_int_t* ldb,
         fortran_int_t* sdim, double* alphar, double* alphai, double* beta,
         double* vsl, const fortran_int_t* ldvsl, double* vsr,
         const fortran_int_t* ldvsr, double* work, const fortran_int_t* lwork,
         logical_t* bwork, fortran_int_t* info );
 void LAPACK_CGGES( const char* jobvsl, const char* jobvsr, const char* sort,
- external_t* selctg, const fortran_int_t* n, void* a,
+ external_fp selctg, const fortran_int_t* n, void* a,
         const fortran_int_t* lda, void* b, const fortran_int_t* ldb,
         fortran_int_t* sdim, void* alpha, void* beta, void* vsl,
         const fortran_int_t* ldvsl, void* vsr, const fortran_int_t* ldvsr,
         void* work, const fortran_int_t* lwork, float* rwork,
         logical_t* bwork, fortran_int_t* info );
 void LAPACK_ZGGES( const char* jobvsl, const char* jobvsr, const char* sort,
- external_t* selctg, const fortran_int_t* n, void* a,
+ external_fp selctg, const fortran_int_t* n, void* a,
         const fortran_int_t* lda, void* b, const fortran_int_t* ldb,
         fortran_int_t* sdim, void* alpha, void* beta, void* vsl,
         const fortran_int_t* ldvsl, void* vsr, const fortran_int_t* ldvsr,
@@ -2486,7 +2486,7 @@
 
 // Value-type variants of ggesx
 void LAPACK_SGGESX( const char* jobvsl, const char* jobvsr, const char* sort,
- external_t* selctg, const char* sense, const fortran_int_t* n,
+ external_fp selctg, const char* sense, const fortran_int_t* n,
         float* a, const fortran_int_t* lda, float* b,
         const fortran_int_t* ldb, fortran_int_t* sdim, float* alphar,
         float* alphai, float* beta, float* vsl, const fortran_int_t* ldvsl,
@@ -2494,7 +2494,7 @@
         float* work, const fortran_int_t* lwork, fortran_int_t* iwork,
         const fortran_int_t* liwork, logical_t* bwork, fortran_int_t* info );
 void LAPACK_DGGESX( const char* jobvsl, const char* jobvsr, const char* sort,
- external_t* selctg, const char* sense, const fortran_int_t* n,
+ external_fp selctg, const char* sense, const fortran_int_t* n,
         double* a, const fortran_int_t* lda, double* b,
         const fortran_int_t* ldb, fortran_int_t* sdim, double* alphar,
         double* alphai, double* beta, double* vsl, const fortran_int_t* ldvsl,
@@ -2503,7 +2503,7 @@
         fortran_int_t* iwork, const fortran_int_t* liwork, logical_t* bwork,
         fortran_int_t* info );
 void LAPACK_CGGESX( const char* jobvsl, const char* jobvsr, const char* sort,
- external_t* selctg, const char* sense, const fortran_int_t* n,
+ external_fp selctg, const char* sense, const fortran_int_t* n,
         void* a, const fortran_int_t* lda, void* b, const fortran_int_t* ldb,
         fortran_int_t* sdim, void* alpha, void* beta, void* vsl,
         const fortran_int_t* ldvsl, void* vsr, const fortran_int_t* ldvsr,
@@ -2511,7 +2511,7 @@
         float* rwork, fortran_int_t* iwork, const fortran_int_t* liwork,
         logical_t* bwork, fortran_int_t* info );
 void LAPACK_ZGGESX( const char* jobvsl, const char* jobvsr, const char* sort,
- external_t* selctg, const char* sense, const fortran_int_t* n,
+ external_fp selctg, const char* sense, const fortran_int_t* n,
         void* a, const fortran_int_t* lda, void* b, const fortran_int_t* ldb,
         fortran_int_t* sdim, void* alpha, void* beta, void* vsl,
         const fortran_int_t* ldvsl, void* vsr, const fortran_int_t* ldvsr,
@@ -3391,47 +3391,47 @@
         fortran_int_t* info );
 
 // Value-type variants of gees
-void LAPACK_SGEES( const char* jobvs, const char* sort, external_t* select,
+void LAPACK_SGEES( const char* jobvs, const char* sort, external_fp select,
         const fortran_int_t* n, float* a, const fortran_int_t* lda,
         fortran_int_t* sdim, float* wr, float* wi, float* vs,
         const fortran_int_t* ldvs, float* work, const fortran_int_t* lwork,
         logical_t* bwork, fortran_int_t* info );
-void LAPACK_DGEES( const char* jobvs, const char* sort, external_t* select,
+void LAPACK_DGEES( const char* jobvs, const char* sort, external_fp select,
         const fortran_int_t* n, double* a, const fortran_int_t* lda,
         fortran_int_t* sdim, double* wr, double* wi, double* vs,
         const fortran_int_t* ldvs, double* work, const fortran_int_t* lwork,
         logical_t* bwork, fortran_int_t* info );
-void LAPACK_CGEES( const char* jobvs, const char* sort, external_t* select,
+void LAPACK_CGEES( const char* jobvs, const char* sort, external_fp select,
         const fortran_int_t* n, void* a, const fortran_int_t* lda,
         fortran_int_t* sdim, void* w, void* vs, const fortran_int_t* ldvs,
         void* work, const fortran_int_t* lwork, float* rwork,
         logical_t* bwork, fortran_int_t* info );
-void LAPACK_ZGEES( const char* jobvs, const char* sort, external_t* select,
+void LAPACK_ZGEES( const char* jobvs, const char* sort, external_fp select,
         const fortran_int_t* n, void* a, const fortran_int_t* lda,
         fortran_int_t* sdim, void* w, void* vs, const fortran_int_t* ldvs,
         void* work, const fortran_int_t* lwork, double* rwork,
         logical_t* bwork, fortran_int_t* info );
 
 // Value-type variants of geesx
-void LAPACK_SGEESX( const char* jobvs, const char* sort, external_t* select,
+void LAPACK_SGEESX( const char* jobvs, const char* sort, external_fp select,
         const char* sense, const fortran_int_t* n, float* a,
         const fortran_int_t* lda, fortran_int_t* sdim, float* wr, float* wi,
         float* vs, const fortran_int_t* ldvs, float* rconde, float* rcondv,
         float* work, const fortran_int_t* lwork, fortran_int_t* iwork,
         const fortran_int_t* liwork, logical_t* bwork, fortran_int_t* info );
-void LAPACK_DGEESX( const char* jobvs, const char* sort, external_t* select,
+void LAPACK_DGEESX( const char* jobvs, const char* sort, external_fp select,
         const char* sense, const fortran_int_t* n, double* a,
         const fortran_int_t* lda, fortran_int_t* sdim, double* wr, double* wi,
         double* vs, const fortran_int_t* ldvs, double* rconde, double* rcondv,
         double* work, const fortran_int_t* lwork, fortran_int_t* iwork,
         const fortran_int_t* liwork, logical_t* bwork, fortran_int_t* info );
-void LAPACK_CGEESX( const char* jobvs, const char* sort, external_t* select,
+void LAPACK_CGEESX( const char* jobvs, const char* sort, external_fp select,
         const char* sense, const fortran_int_t* n, void* a,
         const fortran_int_t* lda, fortran_int_t* sdim, void* w, void* vs,
         const fortran_int_t* ldvs, float* rconde, float* rcondv, void* work,
         const fortran_int_t* lwork, float* rwork, logical_t* bwork,
         fortran_int_t* info );
-void LAPACK_ZGEESX( const char* jobvs, const char* sort, external_t* select,
+void LAPACK_ZGEESX( const char* jobvs, const char* sort, external_fp select,
         const char* sense, const fortran_int_t* n, void* a,
         const fortran_int_t* lda, fortran_int_t* sdim, void* w, void* vs,
         const fortran_int_t* ldvs, double* rconde, double* rcondv, void* work,

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gees.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gees.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gees.hpp 2010-07-18 19:24:35 EDT (Sun, 18 Jul 2010)
@@ -55,12 +55,12 @@
 // * float value-type.
 //
 inline std::ptrdiff_t gees( const char jobvs, const char sort,
- external_t* select, const fortran_int_t n, float* a,
+ external_fp select, const fortran_int_t n, float* a,
         const fortran_int_t lda, fortran_int_t& sdim, float* wr, float* wi,
         float* vs, const fortran_int_t ldvs, float* work,
         const fortran_int_t lwork, logical_t* bwork ) {
     fortran_int_t info(0);
- LAPACK_SGEES( &jobvs, &sort, &select, &n, a, &lda, &sdim, wr, wi, vs,
+ LAPACK_SGEES( &jobvs, &sort, select, &n, a, &lda, &sdim, wr, wi, vs,
             &ldvs, work, &lwork, bwork, &info );
     return info;
 }
@@ -71,12 +71,12 @@
 // * double value-type.
 //
 inline std::ptrdiff_t gees( const char jobvs, const char sort,
- external_t* select, const fortran_int_t n, double* a,
+ external_fp select, const fortran_int_t n, double* a,
         const fortran_int_t lda, fortran_int_t& sdim, double* wr, double* wi,
         double* vs, const fortran_int_t ldvs, double* work,
         const fortran_int_t lwork, logical_t* bwork ) {
     fortran_int_t info(0);
- LAPACK_DGEES( &jobvs, &sort, &select, &n, a, &lda, &sdim, wr, wi, vs,
+ LAPACK_DGEES( &jobvs, &sort, select, &n, a, &lda, &sdim, wr, wi, vs,
             &ldvs, work, &lwork, bwork, &info );
     return info;
 }
@@ -87,13 +87,13 @@
 // * complex<float> value-type.
 //
 inline std::ptrdiff_t gees( const char jobvs, const char sort,
- external_t* select, const fortran_int_t n, std::complex<float>* a,
+ external_fp select, const fortran_int_t n, std::complex<float>* a,
         const fortran_int_t lda, fortran_int_t& sdim, std::complex<float>* w,
         std::complex<float>* vs, const fortran_int_t ldvs,
         std::complex<float>* work, const fortran_int_t lwork, float* rwork,
         logical_t* bwork ) {
     fortran_int_t info(0);
- LAPACK_CGEES( &jobvs, &sort, &select, &n, a, &lda, &sdim, w, vs, &ldvs,
+ LAPACK_CGEES( &jobvs, &sort, select, &n, a, &lda, &sdim, w, vs, &ldvs,
             work, &lwork, rwork, bwork, &info );
     return info;
 }
@@ -104,13 +104,13 @@
 // * complex<double> value-type.
 //
 inline std::ptrdiff_t gees( const char jobvs, const char sort,
- external_t* select, const fortran_int_t n, std::complex<double>* a,
+ external_fp select, const fortran_int_t n, std::complex<double>* a,
         const fortran_int_t lda, fortran_int_t& sdim, std::complex<double>* w,
         std::complex<double>* vs, const fortran_int_t ldvs,
         std::complex<double>* work, const fortran_int_t lwork, double* rwork,
         logical_t* bwork ) {
     fortran_int_t info(0);
- LAPACK_ZGEES( &jobvs, &sort, &select, &n, a, &lda, &sdim, w, vs, &ldvs,
+ LAPACK_ZGEES( &jobvs, &sort, select, &n, a, &lda, &sdim, w, vs, &ldvs,
             work, &lwork, rwork, bwork, &info );
     return info;
 }
@@ -141,7 +141,7 @@
     template< typename MatrixA, typename VectorWR, typename VectorWI,
             typename MatrixVS, typename WORK, typename BWORK >
     static std::ptrdiff_t invoke( const char jobvs, const char sort,
- external_t* select, MatrixA& a, fortran_int_t& sdim,
+ external_fp select, MatrixA& a, fortran_int_t& sdim,
             VectorWR& wr, VectorWI& wi, MatrixVS& vs, detail::workspace2<
             WORK, BWORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -164,8 +164,8 @@
         BOOST_STATIC_ASSERT( (bindings::is_mutable< VectorWI >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixVS >::value) );
         BOOST_ASSERT( bindings::size(wi) >= bindings::size_column(a) );
- BOOST_ASSERT( bindings::size(work.select(bool())) >= min_size_bwork(
- bindings::size_column(a), sort ));
+ BOOST_ASSERT( bindings::size(work.select(logical_t())) >=
+ min_size_bwork( bindings::size_column(a), sort ));
         BOOST_ASSERT( bindings::size(work.select(real_type())) >=
                 min_size_work( bindings::size_column(a) ));
         BOOST_ASSERT( bindings::size(wr) >= bindings::size_column(a) );
@@ -184,7 +184,7 @@
                 bindings::begin_value(vs), bindings::stride_major(vs),
                 bindings::begin_value(work.select(real_type())),
                 bindings::size(work.select(real_type())),
- bindings::begin_value(work.select(bool())) );
+ bindings::begin_value(work.select(logical_t())) );
     }
 
     //
@@ -197,12 +197,12 @@
     template< typename MatrixA, typename VectorWR, typename VectorWI,
             typename MatrixVS >
     static std::ptrdiff_t invoke( const char jobvs, const char sort,
- external_t* select, MatrixA& a, fortran_int_t& sdim,
+ external_fp select, MatrixA& a, fortran_int_t& sdim,
             VectorWR& wr, VectorWI& wi, MatrixVS& vs, minimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
         bindings::detail::array< real_type > tmp_work( min_size_work(
                 bindings::size_column(a) ) );
- bindings::detail::array< bool > tmp_bwork( min_size_bwork(
+ bindings::detail::array< logical_t > tmp_bwork( min_size_bwork(
                 bindings::size_column(a), sort ) );
         return invoke( jobvs, sort, select, a, sdim, wr, wi, vs,
                 workspace( tmp_work, tmp_bwork ) );
@@ -218,11 +218,11 @@
     template< typename MatrixA, typename VectorWR, typename VectorWI,
             typename MatrixVS >
     static std::ptrdiff_t invoke( const char jobvs, const char sort,
- external_t* select, MatrixA& a, fortran_int_t& sdim,
+ external_fp select, MatrixA& a, fortran_int_t& sdim,
             VectorWR& wr, VectorWI& wi, MatrixVS& vs, optimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
         real_type opt_size_work;
- bindings::detail::array< bool > tmp_bwork( min_size_bwork(
+ bindings::detail::array< logical_t > tmp_bwork( min_size_bwork(
                 bindings::size_column(a), sort ) );
         detail::gees( jobvs, sort, select, bindings::size_column(a),
                 bindings::begin_value(a), bindings::stride_major(a), sdim,
@@ -273,7 +273,7 @@
     template< typename MatrixA, typename VectorW, typename MatrixVS,
             typename WORK, typename RWORK, typename BWORK >
     static std::ptrdiff_t invoke( const char jobvs, const char sort,
- external_t* select, MatrixA& a, fortran_int_t& sdim,
+ external_fp select, MatrixA& a, fortran_int_t& sdim,
             VectorW& w, MatrixVS& vs, detail::workspace3< WORK, RWORK,
             BWORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -291,8 +291,8 @@
         BOOST_STATIC_ASSERT( (bindings::is_mutable< VectorW >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixVS >::value) );
         BOOST_ASSERT( bindings::size(w) >= bindings::size_column(a) );
- BOOST_ASSERT( bindings::size(work.select(bool())) >= min_size_bwork(
- bindings::size_column(a), sort ));
+ BOOST_ASSERT( bindings::size(work.select(logical_t())) >=
+ min_size_bwork( bindings::size_column(a), sort ));
         BOOST_ASSERT( bindings::size(work.select(real_type())) >=
                 min_size_rwork( bindings::size_column(a) ));
         BOOST_ASSERT( bindings::size(work.select(value_type())) >=
@@ -313,7 +313,7 @@
                 bindings::begin_value(work.select(value_type())),
                 bindings::size(work.select(value_type())),
                 bindings::begin_value(work.select(real_type())),
- bindings::begin_value(work.select(bool())) );
+ bindings::begin_value(work.select(logical_t())) );
     }
 
     //
@@ -325,14 +325,14 @@
     //
     template< typename MatrixA, typename VectorW, typename MatrixVS >
     static std::ptrdiff_t invoke( const char jobvs, const char sort,
- external_t* select, MatrixA& a, fortran_int_t& sdim,
+ external_fp select, MatrixA& a, fortran_int_t& sdim,
             VectorW& w, MatrixVS& vs, minimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
         bindings::detail::array< value_type > tmp_work( min_size_work(
                 bindings::size_column(a) ) );
         bindings::detail::array< real_type > tmp_rwork( min_size_rwork(
                 bindings::size_column(a) ) );
- bindings::detail::array< bool > tmp_bwork( min_size_bwork(
+ bindings::detail::array< logical_t > tmp_bwork( min_size_bwork(
                 bindings::size_column(a), sort ) );
         return invoke( jobvs, sort, select, a, sdim, w, vs,
                 workspace( tmp_work, tmp_rwork, tmp_bwork ) );
@@ -347,13 +347,13 @@
     //
     template< typename MatrixA, typename VectorW, typename MatrixVS >
     static std::ptrdiff_t invoke( const char jobvs, const char sort,
- external_t* select, MatrixA& a, fortran_int_t& sdim,
+ external_fp select, MatrixA& a, fortran_int_t& sdim,
             VectorW& w, MatrixVS& vs, optimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
         value_type opt_size_work;
         bindings::detail::array< real_type > tmp_rwork( min_size_rwork(
                 bindings::size_column(a) ) );
- bindings::detail::array< bool > tmp_bwork( min_size_bwork(
+ bindings::detail::array< logical_t > tmp_bwork( min_size_bwork(
                 bindings::size_column(a), sort ) );
         detail::gees( jobvs, sort, select, bindings::size_column(a),
                 bindings::begin_value(a), bindings::stride_major(a), sdim,
@@ -416,7 +416,7 @@
         typename MatrixVS, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-gees( const char jobvs, const char sort, external_t* select, MatrixA& a,
+gees( const char jobvs, const char sort, external_fp select, MatrixA& a,
         fortran_int_t& sdim, VectorWR& wr, VectorWI& wi, MatrixVS& vs,
         Workspace work ) {
     return gees_impl< typename bindings::value_type<
@@ -434,7 +434,7 @@
         typename MatrixVS >
 inline typename boost::disable_if< detail::is_workspace< MatrixVS >,
         std::ptrdiff_t >::type
-gees( const char jobvs, const char sort, external_t* select, MatrixA& a,
+gees( const char jobvs, const char sort, external_fp select, MatrixA& a,
         fortran_int_t& sdim, VectorWR& wr, VectorWI& wi, MatrixVS& vs ) {
     return gees_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( jobvs, sort, select, a, sdim, wr, wi,
@@ -451,7 +451,7 @@
         typename MatrixVS, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-gees( const char jobvs, const char sort, external_t* select,
+gees( const char jobvs, const char sort, external_fp select,
         const MatrixA& a, fortran_int_t& sdim, VectorWR& wr, VectorWI& wi,
         MatrixVS& vs, Workspace work ) {
     return gees_impl< typename bindings::value_type<
@@ -469,7 +469,7 @@
         typename MatrixVS >
 inline typename boost::disable_if< detail::is_workspace< MatrixVS >,
         std::ptrdiff_t >::type
-gees( const char jobvs, const char sort, external_t* select,
+gees( const char jobvs, const char sort, external_fp select,
         const MatrixA& a, fortran_int_t& sdim, VectorWR& wr, VectorWI& wi,
         MatrixVS& vs ) {
     return gees_impl< typename bindings::value_type<
@@ -487,7 +487,7 @@
         typename MatrixVS, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-gees( const char jobvs, const char sort, external_t* select, MatrixA& a,
+gees( const char jobvs, const char sort, external_fp select, MatrixA& a,
         fortran_int_t& sdim, VectorWR& wr, VectorWI& wi,
         const MatrixVS& vs, Workspace work ) {
     return gees_impl< typename bindings::value_type<
@@ -505,7 +505,7 @@
         typename MatrixVS >
 inline typename boost::disable_if< detail::is_workspace< MatrixVS >,
         std::ptrdiff_t >::type
-gees( const char jobvs, const char sort, external_t* select, MatrixA& a,
+gees( const char jobvs, const char sort, external_fp select, MatrixA& a,
         fortran_int_t& sdim, VectorWR& wr, VectorWI& wi,
         const MatrixVS& vs ) {
     return gees_impl< typename bindings::value_type<
@@ -523,7 +523,7 @@
         typename MatrixVS, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-gees( const char jobvs, const char sort, external_t* select,
+gees( const char jobvs, const char sort, external_fp select,
         const MatrixA& a, fortran_int_t& sdim, VectorWR& wr, VectorWI& wi,
         const MatrixVS& vs, Workspace work ) {
     return gees_impl< typename bindings::value_type<
@@ -541,7 +541,7 @@
         typename MatrixVS >
 inline typename boost::disable_if< detail::is_workspace< MatrixVS >,
         std::ptrdiff_t >::type
-gees( const char jobvs, const char sort, external_t* select,
+gees( const char jobvs, const char sort, external_fp select,
         const MatrixA& a, fortran_int_t& sdim, VectorWR& wr, VectorWI& wi,
         const MatrixVS& vs ) {
     return gees_impl< typename bindings::value_type<
@@ -558,7 +558,7 @@
         typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-gees( const char jobvs, const char sort, external_t* select, MatrixA& a,
+gees( const char jobvs, const char sort, external_fp select, MatrixA& a,
         fortran_int_t& sdim, VectorW& w, MatrixVS& vs, Workspace work ) {
     return gees_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( jobvs, sort, select, a, sdim, w, vs,
@@ -574,7 +574,7 @@
 template< typename MatrixA, typename VectorW, typename MatrixVS >
 inline typename boost::disable_if< detail::is_workspace< MatrixVS >,
         std::ptrdiff_t >::type
-gees( const char jobvs, const char sort, external_t* select, MatrixA& a,
+gees( const char jobvs, const char sort, external_fp select, MatrixA& a,
         fortran_int_t& sdim, VectorW& w, MatrixVS& vs ) {
     return gees_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( jobvs, sort, select, a, sdim, w, vs,
@@ -591,7 +591,7 @@
         typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-gees( const char jobvs, const char sort, external_t* select,
+gees( const char jobvs, const char sort, external_fp select,
         const MatrixA& a, fortran_int_t& sdim, VectorW& w, MatrixVS& vs,
         Workspace work ) {
     return gees_impl< typename bindings::value_type<
@@ -608,7 +608,7 @@
 template< typename MatrixA, typename VectorW, typename MatrixVS >
 inline typename boost::disable_if< detail::is_workspace< MatrixVS >,
         std::ptrdiff_t >::type
-gees( const char jobvs, const char sort, external_t* select,
+gees( const char jobvs, const char sort, external_fp select,
         const MatrixA& a, fortran_int_t& sdim, VectorW& w, MatrixVS& vs ) {
     return gees_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( jobvs, sort, select, a, sdim, w, vs,
@@ -625,7 +625,7 @@
         typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-gees( const char jobvs, const char sort, external_t* select, MatrixA& a,
+gees( const char jobvs, const char sort, external_fp select, MatrixA& a,
         fortran_int_t& sdim, VectorW& w, const MatrixVS& vs,
         Workspace work ) {
     return gees_impl< typename bindings::value_type<
@@ -642,7 +642,7 @@
 template< typename MatrixA, typename VectorW, typename MatrixVS >
 inline typename boost::disable_if< detail::is_workspace< MatrixVS >,
         std::ptrdiff_t >::type
-gees( const char jobvs, const char sort, external_t* select, MatrixA& a,
+gees( const char jobvs, const char sort, external_fp select, MatrixA& a,
         fortran_int_t& sdim, VectorW& w, const MatrixVS& vs ) {
     return gees_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( jobvs, sort, select, a, sdim, w, vs,
@@ -659,7 +659,7 @@
         typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-gees( const char jobvs, const char sort, external_t* select,
+gees( const char jobvs, const char sort, external_fp select,
         const MatrixA& a, fortran_int_t& sdim, VectorW& w,
         const MatrixVS& vs, Workspace work ) {
     return gees_impl< typename bindings::value_type<
@@ -676,7 +676,7 @@
 template< typename MatrixA, typename VectorW, typename MatrixVS >
 inline typename boost::disable_if< detail::is_workspace< MatrixVS >,
         std::ptrdiff_t >::type
-gees( const char jobvs, const char sort, external_t* select,
+gees( const char jobvs, const char sort, external_fp select,
         const MatrixA& a, fortran_int_t& sdim, VectorW& w,
         const MatrixVS& vs ) {
     return gees_impl< typename bindings::value_type<

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/geesx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/geesx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/geesx.hpp 2010-07-18 19:24:35 EDT (Sun, 18 Jul 2010)
@@ -55,13 +55,13 @@
 // * float value-type.
 //
 inline std::ptrdiff_t geesx( const char jobvs, const char sort,
- external_t* select, const char sense, const fortran_int_t n, float* a,
+ external_fp select, const char sense, const fortran_int_t n, float* a,
         const fortran_int_t lda, fortran_int_t& sdim, float* wr, float* wi,
         float* vs, const fortran_int_t ldvs, float& rconde, float& rcondv,
         float* work, const fortran_int_t lwork, fortran_int_t* iwork,
         const fortran_int_t liwork, logical_t* bwork ) {
     fortran_int_t info(0);
- LAPACK_SGEESX( &jobvs, &sort, &select, &sense, &n, a, &lda, &sdim, wr, wi,
+ LAPACK_SGEESX( &jobvs, &sort, select, &sense, &n, a, &lda, &sdim, wr, wi,
             vs, &ldvs, &rconde, &rcondv, work, &lwork, iwork, &liwork, bwork,
             &info );
     return info;
@@ -73,13 +73,13 @@
 // * double value-type.
 //
 inline std::ptrdiff_t geesx( const char jobvs, const char sort,
- external_t* select, const char sense, const fortran_int_t n,
+ external_fp select, const char sense, const fortran_int_t n,
         double* a, const fortran_int_t lda, fortran_int_t& sdim, double* wr,
         double* wi, double* vs, const fortran_int_t ldvs, double& rconde,
         double& rcondv, double* work, const fortran_int_t lwork,
         fortran_int_t* iwork, const fortran_int_t liwork, logical_t* bwork ) {
     fortran_int_t info(0);
- LAPACK_DGEESX( &jobvs, &sort, &select, &sense, &n, a, &lda, &sdim, wr, wi,
+ LAPACK_DGEESX( &jobvs, &sort, select, &sense, &n, a, &lda, &sdim, wr, wi,
             vs, &ldvs, &rconde, &rcondv, work, &lwork, iwork, &liwork, bwork,
             &info );
     return info;
@@ -91,14 +91,14 @@
 // * complex<float> value-type.
 //
 inline std::ptrdiff_t geesx( const char jobvs, const char sort,
- external_t* select, const char sense, const fortran_int_t n,
+ external_fp select, const char sense, const fortran_int_t n,
         std::complex<float>* a, const fortran_int_t lda, fortran_int_t& sdim,
         std::complex<float>* w, std::complex<float>* vs,
         const fortran_int_t ldvs, float& rconde, float& rcondv,
         std::complex<float>* work, const fortran_int_t lwork, float* rwork,
         logical_t* bwork ) {
     fortran_int_t info(0);
- LAPACK_CGEESX( &jobvs, &sort, &select, &sense, &n, a, &lda, &sdim, w, vs,
+ LAPACK_CGEESX( &jobvs, &sort, select, &sense, &n, a, &lda, &sdim, w, vs,
             &ldvs, &rconde, &rcondv, work, &lwork, rwork, bwork, &info );
     return info;
 }
@@ -109,14 +109,14 @@
 // * complex<double> value-type.
 //
 inline std::ptrdiff_t geesx( const char jobvs, const char sort,
- external_t* select, const char sense, const fortran_int_t n,
+ external_fp select, const char sense, const fortran_int_t n,
         std::complex<double>* a, const fortran_int_t lda, fortran_int_t& sdim,
         std::complex<double>* w, std::complex<double>* vs,
         const fortran_int_t ldvs, double& rconde, double& rcondv,
         std::complex<double>* work, const fortran_int_t lwork, double* rwork,
         logical_t* bwork ) {
     fortran_int_t info(0);
- LAPACK_ZGEESX( &jobvs, &sort, &select, &sense, &n, a, &lda, &sdim, w, vs,
+ LAPACK_ZGEESX( &jobvs, &sort, select, &sense, &n, a, &lda, &sdim, w, vs,
             &ldvs, &rconde, &rcondv, work, &lwork, rwork, bwork, &info );
     return info;
 }
@@ -147,7 +147,7 @@
     template< typename MatrixA, typename VectorWR, typename VectorWI,
             typename MatrixVS, typename WORK, typename IWORK, typename BWORK >
     static std::ptrdiff_t invoke( const char jobvs, const char sort,
- external_t* select, const char sense, MatrixA& a,
+ external_fp select, const char sense, MatrixA& a,
             fortran_int_t& sdim, VectorWR& wr, VectorWI& wi, MatrixVS& vs,
             real_type& rconde, real_type& rcondv, detail::workspace3< WORK,
             IWORK, BWORK > work ) {
@@ -173,8 +173,8 @@
         BOOST_ASSERT( bindings::size(wi) >= bindings::size_column(a) );
         BOOST_ASSERT( bindings::size(work.select(fortran_int_t())) >=
                 min_size_iwork( bindings::size_column(a), sense ));
- BOOST_ASSERT( bindings::size(work.select(bool())) >= min_size_bwork(
- bindings::size_column(a), sort ));
+ BOOST_ASSERT( bindings::size(work.select(logical_t())) >=
+ min_size_bwork( bindings::size_column(a), sort ));
         BOOST_ASSERT( bindings::size(work.select(real_type())) >=
                 min_size_work( bindings::size_column(a), sense ));
         BOOST_ASSERT( bindings::size(wr) >= bindings::size_column(a) );
@@ -198,7 +198,7 @@
                 bindings::size(work.select(real_type())),
                 bindings::begin_value(work.select(fortran_int_t())),
                 bindings::size(work.select(fortran_int_t())),
- bindings::begin_value(work.select(bool())) );
+ bindings::begin_value(work.select(logical_t())) );
     }
 
     //
@@ -211,7 +211,7 @@
     template< typename MatrixA, typename VectorWR, typename VectorWI,
             typename MatrixVS >
     static std::ptrdiff_t invoke( const char jobvs, const char sort,
- external_t* select, const char sense, MatrixA& a,
+ external_fp select, const char sense, MatrixA& a,
             fortran_int_t& sdim, VectorWR& wr, VectorWI& wi, MatrixVS& vs,
             real_type& rconde, real_type& rcondv, minimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -219,7 +219,7 @@
                 bindings::size_column(a), sense ) );
         bindings::detail::array< fortran_int_t > tmp_iwork(
                 min_size_iwork( bindings::size_column(a), sense ) );
- bindings::detail::array< bool > tmp_bwork( min_size_bwork(
+ bindings::detail::array< logical_t > tmp_bwork( min_size_bwork(
                 bindings::size_column(a), sort ) );
         return invoke( jobvs, sort, select, sense, a, sdim, wr, wi, vs,
                 rconde, rcondv, workspace( tmp_work, tmp_iwork, tmp_bwork ) );
@@ -235,13 +235,13 @@
     template< typename MatrixA, typename VectorWR, typename VectorWI,
             typename MatrixVS >
     static std::ptrdiff_t invoke( const char jobvs, const char sort,
- external_t* select, const char sense, MatrixA& a,
+ external_fp select, const char sense, MatrixA& a,
             fortran_int_t& sdim, VectorWR& wr, VectorWI& wi, MatrixVS& vs,
             real_type& rconde, real_type& rcondv, optimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
         real_type opt_size_work;
         fortran_int_t opt_size_iwork;
- bindings::detail::array< bool > tmp_bwork( min_size_bwork(
+ bindings::detail::array< logical_t > tmp_bwork( min_size_bwork(
                 bindings::size_column(a), sort ) );
         detail::geesx( jobvs, sort, select, sense,
                 bindings::size_column(a), bindings::begin_value(a),
@@ -311,7 +311,7 @@
     template< typename MatrixA, typename VectorW, typename MatrixVS,
             typename WORK, typename RWORK, typename BWORK >
     static std::ptrdiff_t invoke( const char jobvs, const char sort,
- external_t* select, const char sense, MatrixA& a,
+ external_fp select, const char sense, MatrixA& a,
             fortran_int_t& sdim, VectorW& w, MatrixVS& vs,
             real_type& rconde, real_type& rcondv, detail::workspace3< WORK,
             RWORK, BWORK > work ) {
@@ -330,8 +330,8 @@
         BOOST_STATIC_ASSERT( (bindings::is_mutable< VectorW >::value) );
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixVS >::value) );
         BOOST_ASSERT( bindings::size(w) >= bindings::size_column(a) );
- BOOST_ASSERT( bindings::size(work.select(bool())) >= min_size_bwork(
- bindings::size_column(a), sort ));
+ BOOST_ASSERT( bindings::size(work.select(logical_t())) >=
+ min_size_bwork( bindings::size_column(a), sort ));
         BOOST_ASSERT( bindings::size(work.select(real_type())) >=
                 min_size_rwork( bindings::size_column(a) ));
         BOOST_ASSERT( bindings::size(work.select(value_type())) >=
@@ -354,7 +354,7 @@
                 rcondv, bindings::begin_value(work.select(value_type())),
                 bindings::size(work.select(value_type())),
                 bindings::begin_value(work.select(real_type())),
- bindings::begin_value(work.select(bool())) );
+ bindings::begin_value(work.select(logical_t())) );
     }
 
     //
@@ -366,7 +366,7 @@
     //
     template< typename MatrixA, typename VectorW, typename MatrixVS >
     static std::ptrdiff_t invoke( const char jobvs, const char sort,
- external_t* select, const char sense, MatrixA& a,
+ external_fp select, const char sense, MatrixA& a,
             fortran_int_t& sdim, VectorW& w, MatrixVS& vs,
             real_type& rconde, real_type& rcondv, minimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -374,7 +374,7 @@
                 bindings::size_column(a), sense ) );
         bindings::detail::array< real_type > tmp_rwork( min_size_rwork(
                 bindings::size_column(a) ) );
- bindings::detail::array< bool > tmp_bwork( min_size_bwork(
+ bindings::detail::array< logical_t > tmp_bwork( min_size_bwork(
                 bindings::size_column(a), sort ) );
         return invoke( jobvs, sort, select, sense, a, sdim, w, vs, rconde,
                 rcondv, workspace( tmp_work, tmp_rwork, tmp_bwork ) );
@@ -389,14 +389,14 @@
     //
     template< typename MatrixA, typename VectorW, typename MatrixVS >
     static std::ptrdiff_t invoke( const char jobvs, const char sort,
- external_t* select, const char sense, MatrixA& a,
+ external_fp select, const char sense, MatrixA& a,
             fortran_int_t& sdim, VectorW& w, MatrixVS& vs,
             real_type& rconde, real_type& rcondv, optimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
         value_type opt_size_work;
         bindings::detail::array< real_type > tmp_rwork( min_size_rwork(
                 bindings::size_column(a) ) );
- bindings::detail::array< bool > tmp_bwork( min_size_bwork(
+ bindings::detail::array< logical_t > tmp_bwork( min_size_bwork(
                 bindings::size_column(a), sort ) );
         detail::geesx( jobvs, sort, select, sense,
                 bindings::size_column(a), bindings::begin_value(a),
@@ -463,7 +463,7 @@
         typename MatrixVS, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-geesx( const char jobvs, const char sort, external_t* select,
+geesx( const char jobvs, const char sort, external_fp select,
         const char sense, MatrixA& a, fortran_int_t& sdim, VectorWR& wr,
         VectorWI& wi, MatrixVS& vs, typename remove_imaginary<
         typename bindings::value_type< MatrixA >::type >::type& rconde,
@@ -484,7 +484,7 @@
         typename MatrixVS >
 inline typename boost::disable_if< detail::is_workspace< MatrixVS >,
         std::ptrdiff_t >::type
-geesx( const char jobvs, const char sort, external_t* select,
+geesx( const char jobvs, const char sort, external_fp select,
         const char sense, MatrixA& a, fortran_int_t& sdim, VectorWR& wr,
         VectorWI& wi, MatrixVS& vs, typename remove_imaginary<
         typename bindings::value_type< MatrixA >::type >::type& rconde,
@@ -505,7 +505,7 @@
         typename MatrixVS, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-geesx( const char jobvs, const char sort, external_t* select,
+geesx( const char jobvs, const char sort, external_fp select,
         const char sense, const MatrixA& a, fortran_int_t& sdim,
         VectorWR& wr, VectorWI& wi, MatrixVS& vs, typename remove_imaginary<
         typename bindings::value_type< MatrixA >::type >::type& rconde,
@@ -526,7 +526,7 @@
         typename MatrixVS >
 inline typename boost::disable_if< detail::is_workspace< MatrixVS >,
         std::ptrdiff_t >::type
-geesx( const char jobvs, const char sort, external_t* select,
+geesx( const char jobvs, const char sort, external_fp select,
         const char sense, const MatrixA& a, fortran_int_t& sdim,
         VectorWR& wr, VectorWI& wi, MatrixVS& vs, typename remove_imaginary<
         typename bindings::value_type< MatrixA >::type >::type& rconde,
@@ -547,7 +547,7 @@
         typename MatrixVS, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-geesx( const char jobvs, const char sort, external_t* select,
+geesx( const char jobvs, const char sort, external_fp select,
         const char sense, MatrixA& a, fortran_int_t& sdim, VectorWR& wr,
         VectorWI& wi, const MatrixVS& vs, typename remove_imaginary<
         typename bindings::value_type< MatrixA >::type >::type& rconde,
@@ -568,7 +568,7 @@
         typename MatrixVS >
 inline typename boost::disable_if< detail::is_workspace< MatrixVS >,
         std::ptrdiff_t >::type
-geesx( const char jobvs, const char sort, external_t* select,
+geesx( const char jobvs, const char sort, external_fp select,
         const char sense, MatrixA& a, fortran_int_t& sdim, VectorWR& wr,
         VectorWI& wi, const MatrixVS& vs, typename remove_imaginary<
         typename bindings::value_type< MatrixA >::type >::type& rconde,
@@ -589,7 +589,7 @@
         typename MatrixVS, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-geesx( const char jobvs, const char sort, external_t* select,
+geesx( const char jobvs, const char sort, external_fp select,
         const char sense, const MatrixA& a, fortran_int_t& sdim,
         VectorWR& wr, VectorWI& wi, const MatrixVS& vs,
         typename remove_imaginary< typename bindings::value_type<
@@ -611,7 +611,7 @@
         typename MatrixVS >
 inline typename boost::disable_if< detail::is_workspace< MatrixVS >,
         std::ptrdiff_t >::type
-geesx( const char jobvs, const char sort, external_t* select,
+geesx( const char jobvs, const char sort, external_fp select,
         const char sense, const MatrixA& a, fortran_int_t& sdim,
         VectorWR& wr, VectorWI& wi, const MatrixVS& vs,
         typename remove_imaginary< typename bindings::value_type<
@@ -631,7 +631,7 @@
         typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-geesx( const char jobvs, const char sort, external_t* select,
+geesx( const char jobvs, const char sort, external_fp select,
         const char sense, MatrixA& a, fortran_int_t& sdim, VectorW& w,
         MatrixVS& vs, typename remove_imaginary<
         typename bindings::value_type< MatrixA >::type >::type& rconde,
@@ -651,7 +651,7 @@
 template< typename MatrixA, typename VectorW, typename MatrixVS >
 inline typename boost::disable_if< detail::is_workspace< MatrixVS >,
         std::ptrdiff_t >::type
-geesx( const char jobvs, const char sort, external_t* select,
+geesx( const char jobvs, const char sort, external_fp select,
         const char sense, MatrixA& a, fortran_int_t& sdim, VectorW& w,
         MatrixVS& vs, typename remove_imaginary<
         typename bindings::value_type< MatrixA >::type >::type& rconde,
@@ -672,7 +672,7 @@
         typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-geesx( const char jobvs, const char sort, external_t* select,
+geesx( const char jobvs, const char sort, external_fp select,
         const char sense, const MatrixA& a, fortran_int_t& sdim,
         VectorW& w, MatrixVS& vs, typename remove_imaginary<
         typename bindings::value_type< MatrixA >::type >::type& rconde,
@@ -692,7 +692,7 @@
 template< typename MatrixA, typename VectorW, typename MatrixVS >
 inline typename boost::disable_if< detail::is_workspace< MatrixVS >,
         std::ptrdiff_t >::type
-geesx( const char jobvs, const char sort, external_t* select,
+geesx( const char jobvs, const char sort, external_fp select,
         const char sense, const MatrixA& a, fortran_int_t& sdim,
         VectorW& w, MatrixVS& vs, typename remove_imaginary<
         typename bindings::value_type< MatrixA >::type >::type& rconde,
@@ -713,7 +713,7 @@
         typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-geesx( const char jobvs, const char sort, external_t* select,
+geesx( const char jobvs, const char sort, external_fp select,
         const char sense, MatrixA& a, fortran_int_t& sdim, VectorW& w,
         const MatrixVS& vs, typename remove_imaginary<
         typename bindings::value_type< MatrixA >::type >::type& rconde,
@@ -733,7 +733,7 @@
 template< typename MatrixA, typename VectorW, typename MatrixVS >
 inline typename boost::disable_if< detail::is_workspace< MatrixVS >,
         std::ptrdiff_t >::type
-geesx( const char jobvs, const char sort, external_t* select,
+geesx( const char jobvs, const char sort, external_fp select,
         const char sense, MatrixA& a, fortran_int_t& sdim, VectorW& w,
         const MatrixVS& vs, typename remove_imaginary<
         typename bindings::value_type< MatrixA >::type >::type& rconde,
@@ -754,7 +754,7 @@
         typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-geesx( const char jobvs, const char sort, external_t* select,
+geesx( const char jobvs, const char sort, external_fp select,
         const char sense, const MatrixA& a, fortran_int_t& sdim,
         VectorW& w, const MatrixVS& vs, typename remove_imaginary<
         typename bindings::value_type< MatrixA >::type >::type& rconde,
@@ -774,7 +774,7 @@
 template< typename MatrixA, typename VectorW, typename MatrixVS >
 inline typename boost::disable_if< detail::is_workspace< MatrixVS >,
         std::ptrdiff_t >::type
-geesx( const char jobvs, const char sort, external_t* select,
+geesx( const char jobvs, const char sort, external_fp select,
         const char sense, const MatrixA& a, fortran_int_t& sdim,
         VectorW& w, const MatrixVS& vs, typename remove_imaginary<
         typename bindings::value_type< MatrixA >::type >::type& rconde,

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gges.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gges.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gges.hpp 2010-07-18 19:24:35 EDT (Sun, 18 Jul 2010)
@@ -55,14 +55,14 @@
 // * float value-type.
 //
 inline std::ptrdiff_t gges( const char jobvsl, const char jobvsr,
- const char sort, external_t* selctg, const fortran_int_t n, float* a,
+ const char sort, external_fp selctg, const fortran_int_t n, float* a,
         const fortran_int_t lda, float* b, const fortran_int_t ldb,
         fortran_int_t& sdim, float* alphar, float* alphai, float* beta,
         float* vsl, const fortran_int_t ldvsl, float* vsr,
         const fortran_int_t ldvsr, float* work, const fortran_int_t lwork,
         logical_t* bwork ) {
     fortran_int_t info(0);
- LAPACK_SGGES( &jobvsl, &jobvsr, &sort, &selctg, &n, a, &lda, b, &ldb,
+ LAPACK_SGGES( &jobvsl, &jobvsr, &sort, selctg, &n, a, &lda, b, &ldb,
             &sdim, alphar, alphai, beta, vsl, &ldvsl, vsr, &ldvsr, work,
             &lwork, bwork, &info );
     return info;
@@ -74,14 +74,14 @@
 // * double value-type.
 //
 inline std::ptrdiff_t gges( const char jobvsl, const char jobvsr,
- const char sort, external_t* selctg, const fortran_int_t n, double* a,
+ const char sort, external_fp selctg, const fortran_int_t n, double* a,
         const fortran_int_t lda, double* b, const fortran_int_t ldb,
         fortran_int_t& sdim, double* alphar, double* alphai, double* beta,
         double* vsl, const fortran_int_t ldvsl, double* vsr,
         const fortran_int_t ldvsr, double* work, const fortran_int_t lwork,
         logical_t* bwork ) {
     fortran_int_t info(0);
- LAPACK_DGGES( &jobvsl, &jobvsr, &sort, &selctg, &n, a, &lda, b, &ldb,
+ LAPACK_DGGES( &jobvsl, &jobvsr, &sort, selctg, &n, a, &lda, b, &ldb,
             &sdim, alphar, alphai, beta, vsl, &ldvsl, vsr, &ldvsr, work,
             &lwork, bwork, &info );
     return info;
@@ -93,7 +93,7 @@
 // * complex<float> value-type.
 //
 inline std::ptrdiff_t gges( const char jobvsl, const char jobvsr,
- const char sort, external_t* selctg, const fortran_int_t n,
+ const char sort, external_fp selctg, const fortran_int_t n,
         std::complex<float>* a, const fortran_int_t lda,
         std::complex<float>* b, const fortran_int_t ldb, fortran_int_t& sdim,
         std::complex<float>* alpha, std::complex<float>* beta,
@@ -102,7 +102,7 @@
         std::complex<float>* work, const fortran_int_t lwork, float* rwork,
         logical_t* bwork ) {
     fortran_int_t info(0);
- LAPACK_CGGES( &jobvsl, &jobvsr, &sort, &selctg, &n, a, &lda, b, &ldb,
+ LAPACK_CGGES( &jobvsl, &jobvsr, &sort, selctg, &n, a, &lda, b, &ldb,
             &sdim, alpha, beta, vsl, &ldvsl, vsr, &ldvsr, work, &lwork, rwork,
             bwork, &info );
     return info;
@@ -114,7 +114,7 @@
 // * complex<double> value-type.
 //
 inline std::ptrdiff_t gges( const char jobvsl, const char jobvsr,
- const char sort, external_t* selctg, const fortran_int_t n,
+ const char sort, external_fp selctg, const fortran_int_t n,
         std::complex<double>* a, const fortran_int_t lda,
         std::complex<double>* b, const fortran_int_t ldb, fortran_int_t& sdim,
         std::complex<double>* alpha, std::complex<double>* beta,
@@ -123,7 +123,7 @@
         std::complex<double>* work, const fortran_int_t lwork, double* rwork,
         logical_t* bwork ) {
     fortran_int_t info(0);
- LAPACK_ZGGES( &jobvsl, &jobvsr, &sort, &selctg, &n, a, &lda, b, &ldb,
+ LAPACK_ZGGES( &jobvsl, &jobvsr, &sort, selctg, &n, a, &lda, b, &ldb,
             &sdim, alpha, beta, vsl, &ldvsl, vsr, &ldvsr, work, &lwork, rwork,
             bwork, &info );
     return info;
@@ -156,7 +156,7 @@
             typename VectorALPHAI, typename VectorBETA, typename MatrixVSL,
             typename MatrixVSR, typename WORK, typename BWORK >
     static std::ptrdiff_t invoke( const char jobvsl, const char jobvsr,
- const char sort, external_t* selctg, MatrixA& a, MatrixB& b,
+ const char sort, external_fp selctg, MatrixA& a, MatrixB& b,
             fortran_int_t& sdim, VectorALPHAR& alphar,
             VectorALPHAI& alphai, VectorBETA& beta, MatrixVSL& vsl,
             MatrixVSR& vsr, detail::workspace2< WORK, BWORK > work ) {
@@ -198,8 +198,8 @@
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixVSR >::value) );
         BOOST_ASSERT( bindings::size(alphai) >= bindings::size_column(a) );
         BOOST_ASSERT( bindings::size(alphar) >= bindings::size_column(a) );
- BOOST_ASSERT( bindings::size(work.select(bool())) >= min_size_bwork(
- bindings::size_column(a), sort ));
+ BOOST_ASSERT( bindings::size(work.select(logical_t())) >=
+ min_size_bwork( bindings::size_column(a), sort ));
         BOOST_ASSERT( bindings::size(work.select(real_type())) >=
                 min_size_work( bindings::size_column(a) ));
         BOOST_ASSERT( bindings::size_column(a) >= 0 );
@@ -228,7 +228,7 @@
                 bindings::stride_major(vsr),
                 bindings::begin_value(work.select(real_type())),
                 bindings::size(work.select(real_type())),
- bindings::begin_value(work.select(bool())) );
+ bindings::begin_value(work.select(logical_t())) );
     }
 
     //
@@ -242,14 +242,14 @@
             typename VectorALPHAI, typename VectorBETA, typename MatrixVSL,
             typename MatrixVSR >
     static std::ptrdiff_t invoke( const char jobvsl, const char jobvsr,
- const char sort, external_t* selctg, MatrixA& a, MatrixB& b,
+ const char sort, external_fp selctg, MatrixA& a, MatrixB& b,
             fortran_int_t& sdim, VectorALPHAR& alphar,
             VectorALPHAI& alphai, VectorBETA& beta, MatrixVSL& vsl,
             MatrixVSR& vsr, minimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
         bindings::detail::array< real_type > tmp_work( min_size_work(
                 bindings::size_column(a) ) );
- bindings::detail::array< bool > tmp_bwork( min_size_bwork(
+ bindings::detail::array< logical_t > tmp_bwork( min_size_bwork(
                 bindings::size_column(a), sort ) );
         return invoke( jobvsl, jobvsr, sort, selctg, a, b, sdim, alphar,
                 alphai, beta, vsl, vsr, workspace( tmp_work, tmp_bwork ) );
@@ -266,13 +266,13 @@
             typename VectorALPHAI, typename VectorBETA, typename MatrixVSL,
             typename MatrixVSR >
     static std::ptrdiff_t invoke( const char jobvsl, const char jobvsr,
- const char sort, external_t* selctg, MatrixA& a, MatrixB& b,
+ const char sort, external_fp selctg, MatrixA& a, MatrixB& b,
             fortran_int_t& sdim, VectorALPHAR& alphar,
             VectorALPHAI& alphai, VectorBETA& beta, MatrixVSL& vsl,
             MatrixVSR& vsr, optimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
         real_type opt_size_work;
- bindings::detail::array< bool > tmp_bwork( min_size_bwork(
+ bindings::detail::array< logical_t > tmp_bwork( min_size_bwork(
                 bindings::size_column(a), sort ) );
         detail::gges( jobvsl, jobvsr, sort, selctg,
                 bindings::size_column(a), bindings::begin_value(a),
@@ -332,7 +332,7 @@
             typename VectorBETA, typename MatrixVSL, typename MatrixVSR,
             typename WORK, typename RWORK, typename BWORK >
     static std::ptrdiff_t invoke( const char jobvsl, const char jobvsr,
- const char sort, external_t* selctg, MatrixA& a, MatrixB& b,
+ const char sort, external_fp selctg, MatrixA& a, MatrixB& b,
             fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
             MatrixVSL& vsl, MatrixVSR& vsr, detail::workspace3< WORK, RWORK,
             BWORK > work ) {
@@ -369,8 +369,8 @@
         BOOST_STATIC_ASSERT( (bindings::is_mutable< MatrixVSR >::value) );
         BOOST_ASSERT( bindings::size(alpha) >= bindings::size_column(a) );
         BOOST_ASSERT( bindings::size(beta) >= bindings::size_column(a) );
- BOOST_ASSERT( bindings::size(work.select(bool())) >= min_size_bwork(
- bindings::size_column(a), sort ));
+ BOOST_ASSERT( bindings::size(work.select(logical_t())) >=
+ min_size_bwork( bindings::size_column(a), sort ));
         BOOST_ASSERT( bindings::size(work.select(real_type())) >=
                 min_size_rwork( bindings::size_column(a) ));
         BOOST_ASSERT( bindings::size(work.select(value_type())) >=
@@ -401,7 +401,7 @@
                 bindings::begin_value(work.select(value_type())),
                 bindings::size(work.select(value_type())),
                 bindings::begin_value(work.select(real_type())),
- bindings::begin_value(work.select(bool())) );
+ bindings::begin_value(work.select(logical_t())) );
     }
 
     //
@@ -414,7 +414,7 @@
     template< typename MatrixA, typename MatrixB, typename VectorALPHA,
             typename VectorBETA, typename MatrixVSL, typename MatrixVSR >
     static std::ptrdiff_t invoke( const char jobvsl, const char jobvsr,
- const char sort, external_t* selctg, MatrixA& a, MatrixB& b,
+ const char sort, external_fp selctg, MatrixA& a, MatrixB& b,
             fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
             MatrixVSL& vsl, MatrixVSR& vsr, minimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -422,7 +422,7 @@
                 bindings::size_column(a) ) );
         bindings::detail::array< real_type > tmp_rwork( min_size_rwork(
                 bindings::size_column(a) ) );
- bindings::detail::array< bool > tmp_bwork( min_size_bwork(
+ bindings::detail::array< logical_t > tmp_bwork( min_size_bwork(
                 bindings::size_column(a), sort ) );
         return invoke( jobvsl, jobvsr, sort, selctg, a, b, sdim, alpha, beta,
                 vsl, vsr, workspace( tmp_work, tmp_rwork, tmp_bwork ) );
@@ -438,14 +438,14 @@
     template< typename MatrixA, typename MatrixB, typename VectorALPHA,
             typename VectorBETA, typename MatrixVSL, typename MatrixVSR >
     static std::ptrdiff_t invoke( const char jobvsl, const char jobvsr,
- const char sort, external_t* selctg, MatrixA& a, MatrixB& b,
+ const char sort, external_fp selctg, MatrixA& a, MatrixB& b,
             fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
             MatrixVSL& vsl, MatrixVSR& vsr, optimal_workspace ) {
         namespace bindings = ::boost::numeric::bindings;
         value_type opt_size_work;
         bindings::detail::array< real_type > tmp_rwork( min_size_rwork(
                 bindings::size_column(a) ) );
- bindings::detail::array< bool > tmp_bwork( min_size_bwork(
+ bindings::detail::array< logical_t > tmp_bwork( min_size_bwork(
                 bindings::size_column(a), sort ) );
         detail::gges( jobvsl, jobvsr, sort, selctg,
                 bindings::size_column(a), bindings::begin_value(a),
@@ -515,7 +515,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
+ external_fp selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
         VectorALPHAR& alphar, VectorALPHAI& alphai, VectorBETA& beta,
         MatrixVSL& vsl, MatrixVSR& vsr, Workspace work ) {
     return gges_impl< typename bindings::value_type<
@@ -537,7 +537,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
+ external_fp selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
         VectorALPHAR& alphar, VectorALPHAI& alphai, VectorBETA& beta,
         MatrixVSL& vsl, MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -559,7 +559,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, MatrixVSL& vsl, MatrixVSR& vsr, Workspace work ) {
     return gges_impl< typename bindings::value_type<
@@ -581,7 +581,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, MatrixVSL& vsl, MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -603,7 +603,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, const MatrixB& b,
+ external_fp selctg, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, MatrixVSL& vsl, MatrixVSR& vsr, Workspace work ) {
     return gges_impl< typename bindings::value_type<
@@ -625,7 +625,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, const MatrixB& b,
+ external_fp selctg, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, MatrixVSL& vsl, MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -647,7 +647,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, const MatrixB& b,
+ external_fp selctg, const MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, MatrixVSL& vsl, MatrixVSR& vsr, Workspace work ) {
     return gges_impl< typename bindings::value_type<
@@ -669,7 +669,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, const MatrixB& b,
+ external_fp selctg, const MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, MatrixVSL& vsl, MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -691,7 +691,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
+ external_fp selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
         VectorALPHAR& alphar, VectorALPHAI& alphai, VectorBETA& beta,
         const MatrixVSL& vsl, MatrixVSR& vsr, Workspace work ) {
     return gges_impl< typename bindings::value_type<
@@ -713,7 +713,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
+ external_fp selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
         VectorALPHAR& alphar, VectorALPHAI& alphai, VectorBETA& beta,
         const MatrixVSL& vsl, MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -735,7 +735,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, const MatrixVSL& vsl, MatrixVSR& vsr,
         Workspace work ) {
@@ -758,7 +758,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, const MatrixVSL& vsl, MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -780,7 +780,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, const MatrixB& b,
+ external_fp selctg, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, const MatrixVSL& vsl, MatrixVSR& vsr,
         Workspace work ) {
@@ -803,7 +803,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, const MatrixB& b,
+ external_fp selctg, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, const MatrixVSL& vsl, MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -825,7 +825,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, const MatrixB& b,
+ external_fp selctg, const MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, const MatrixVSL& vsl, MatrixVSR& vsr,
         Workspace work ) {
@@ -848,7 +848,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, const MatrixB& b,
+ external_fp selctg, const MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, const MatrixVSL& vsl, MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -870,7 +870,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
+ external_fp selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
         VectorALPHAR& alphar, VectorALPHAI& alphai, VectorBETA& beta,
         MatrixVSL& vsl, const MatrixVSR& vsr, Workspace work ) {
     return gges_impl< typename bindings::value_type<
@@ -892,7 +892,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
+ external_fp selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
         VectorALPHAR& alphar, VectorALPHAI& alphai, VectorBETA& beta,
         MatrixVSL& vsl, const MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -914,7 +914,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, MatrixVSL& vsl, const MatrixVSR& vsr,
         Workspace work ) {
@@ -937,7 +937,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, MatrixVSL& vsl, const MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -959,7 +959,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, const MatrixB& b,
+ external_fp selctg, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, MatrixVSL& vsl, const MatrixVSR& vsr,
         Workspace work ) {
@@ -982,7 +982,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, const MatrixB& b,
+ external_fp selctg, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, MatrixVSL& vsl, const MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -1004,7 +1004,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, const MatrixB& b,
+ external_fp selctg, const MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, MatrixVSL& vsl, const MatrixVSR& vsr,
         Workspace work ) {
@@ -1027,7 +1027,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, const MatrixB& b,
+ external_fp selctg, const MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, MatrixVSL& vsl, const MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -1049,7 +1049,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
+ external_fp selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
         VectorALPHAR& alphar, VectorALPHAI& alphai, VectorBETA& beta,
         const MatrixVSL& vsl, const MatrixVSR& vsr, Workspace work ) {
     return gges_impl< typename bindings::value_type<
@@ -1071,7 +1071,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
+ external_fp selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
         VectorALPHAR& alphar, VectorALPHAI& alphai, VectorBETA& beta,
         const MatrixVSL& vsl, const MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -1093,7 +1093,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, const MatrixVSL& vsl, const MatrixVSR& vsr,
         Workspace work ) {
@@ -1116,7 +1116,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, const MatrixVSL& vsl, const MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -1138,7 +1138,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, const MatrixB& b,
+ external_fp selctg, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, const MatrixVSL& vsl, const MatrixVSR& vsr,
         Workspace work ) {
@@ -1161,7 +1161,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, const MatrixB& b,
+ external_fp selctg, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, const MatrixVSL& vsl, const MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -1183,7 +1183,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, const MatrixB& b,
+ external_fp selctg, const MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, const MatrixVSL& vsl, const MatrixVSR& vsr,
         Workspace work ) {
@@ -1206,7 +1206,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, const MatrixB& b,
+ external_fp selctg, const MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, const MatrixVSL& vsl, const MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -1227,7 +1227,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
+ external_fp selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
         VectorALPHA& alpha, VectorBETA& beta, MatrixVSL& vsl, MatrixVSR& vsr,
         Workspace work ) {
     return gges_impl< typename bindings::value_type<
@@ -1248,7 +1248,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
+ external_fp selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
         VectorALPHA& alpha, VectorBETA& beta, MatrixVSL& vsl,
         MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -1270,7 +1270,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         MatrixVSL& vsl, MatrixVSR& vsr, Workspace work ) {
     return gges_impl< typename bindings::value_type<
@@ -1291,7 +1291,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         MatrixVSL& vsl, MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -1313,7 +1313,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, const MatrixB& b,
+ external_fp selctg, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         MatrixVSL& vsl, MatrixVSR& vsr, Workspace work ) {
     return gges_impl< typename bindings::value_type<
@@ -1334,7 +1334,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, const MatrixB& b,
+ external_fp selctg, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         MatrixVSL& vsl, MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -1356,7 +1356,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, const MatrixB& b,
+ external_fp selctg, const MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         MatrixVSL& vsl, MatrixVSR& vsr, Workspace work ) {
     return gges_impl< typename bindings::value_type<
@@ -1377,7 +1377,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, const MatrixB& b,
+ external_fp selctg, const MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         MatrixVSL& vsl, MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -1399,7 +1399,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
+ external_fp selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
         VectorALPHA& alpha, VectorBETA& beta, const MatrixVSL& vsl,
         MatrixVSR& vsr, Workspace work ) {
     return gges_impl< typename bindings::value_type<
@@ -1420,7 +1420,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
+ external_fp selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
         VectorALPHA& alpha, VectorBETA& beta, const MatrixVSL& vsl,
         MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -1442,7 +1442,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         const MatrixVSL& vsl, MatrixVSR& vsr, Workspace work ) {
     return gges_impl< typename bindings::value_type<
@@ -1463,7 +1463,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         const MatrixVSL& vsl, MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -1485,7 +1485,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, const MatrixB& b,
+ external_fp selctg, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         const MatrixVSL& vsl, MatrixVSR& vsr, Workspace work ) {
     return gges_impl< typename bindings::value_type<
@@ -1506,7 +1506,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, const MatrixB& b,
+ external_fp selctg, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         const MatrixVSL& vsl, MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -1528,7 +1528,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, const MatrixB& b,
+ external_fp selctg, const MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         const MatrixVSL& vsl, MatrixVSR& vsr, Workspace work ) {
     return gges_impl< typename bindings::value_type<
@@ -1549,7 +1549,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, const MatrixB& b,
+ external_fp selctg, const MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         const MatrixVSL& vsl, MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -1571,7 +1571,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
+ external_fp selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
         VectorALPHA& alpha, VectorBETA& beta, MatrixVSL& vsl,
         const MatrixVSR& vsr, Workspace work ) {
     return gges_impl< typename bindings::value_type<
@@ -1592,7 +1592,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
+ external_fp selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
         VectorALPHA& alpha, VectorBETA& beta, MatrixVSL& vsl,
         const MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -1614,7 +1614,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         MatrixVSL& vsl, const MatrixVSR& vsr, Workspace work ) {
     return gges_impl< typename bindings::value_type<
@@ -1635,7 +1635,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         MatrixVSL& vsl, const MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -1657,7 +1657,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, const MatrixB& b,
+ external_fp selctg, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         MatrixVSL& vsl, const MatrixVSR& vsr, Workspace work ) {
     return gges_impl< typename bindings::value_type<
@@ -1678,7 +1678,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, const MatrixB& b,
+ external_fp selctg, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         MatrixVSL& vsl, const MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -1700,7 +1700,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, const MatrixB& b,
+ external_fp selctg, const MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         MatrixVSL& vsl, const MatrixVSR& vsr, Workspace work ) {
     return gges_impl< typename bindings::value_type<
@@ -1721,7 +1721,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, const MatrixB& b,
+ external_fp selctg, const MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         MatrixVSL& vsl, const MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -1743,7 +1743,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
+ external_fp selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
         VectorALPHA& alpha, VectorBETA& beta, const MatrixVSL& vsl,
         const MatrixVSR& vsr, Workspace work ) {
     return gges_impl< typename bindings::value_type<
@@ -1764,7 +1764,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
+ external_fp selctg, MatrixA& a, MatrixB& b, fortran_int_t& sdim,
         VectorALPHA& alpha, VectorBETA& beta, const MatrixVSL& vsl,
         const MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -1786,7 +1786,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         const MatrixVSL& vsl, const MatrixVSR& vsr, Workspace work ) {
     return gges_impl< typename bindings::value_type<
@@ -1807,7 +1807,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         const MatrixVSL& vsl, const MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -1829,7 +1829,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, const MatrixB& b,
+ external_fp selctg, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         const MatrixVSL& vsl, const MatrixVSR& vsr, Workspace work ) {
     return gges_impl< typename bindings::value_type<
@@ -1850,7 +1850,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, const MatrixB& b,
+ external_fp selctg, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         const MatrixVSL& vsl, const MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<
@@ -1872,7 +1872,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, const MatrixB& b,
+ external_fp selctg, const MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         const MatrixVSL& vsl, const MatrixVSR& vsr, Workspace work ) {
     return gges_impl< typename bindings::value_type<
@@ -1893,7 +1893,7 @@
 inline typename boost::disable_if< detail::is_workspace< MatrixVSR >,
         std::ptrdiff_t >::type
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const MatrixA& a, const MatrixB& b,
+ external_fp selctg, const MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         const MatrixVSL& vsl, const MatrixVSR& vsr ) {
     return gges_impl< typename bindings::value_type<

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ggesx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ggesx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ggesx.hpp 2010-07-18 19:24:35 EDT (Sun, 18 Jul 2010)
@@ -55,7 +55,7 @@
 // * float value-type.
 //
 inline std::ptrdiff_t ggesx( const char jobvsl, const char jobvsr,
- const char sort, external_t* selctg, const char sense,
+ const char sort, external_fp selctg, const char sense,
         const fortran_int_t n, float* a, const fortran_int_t lda, float* b,
         const fortran_int_t ldb, fortran_int_t& sdim, float* alphar,
         float* alphai, float* beta, float* vsl, const fortran_int_t ldvsl,
@@ -63,7 +63,7 @@
         float* work, const fortran_int_t lwork, fortran_int_t* iwork,
         const fortran_int_t liwork, logical_t* bwork ) {
     fortran_int_t info(0);
- LAPACK_SGGESX( &jobvsl, &jobvsr, &sort, &selctg, &sense, &n, a, &lda, b,
+ LAPACK_SGGESX( &jobvsl, &jobvsr, &sort, selctg, &sense, &n, a, &lda, b,
             &ldb, &sdim, alphar, alphai, beta, vsl, &ldvsl, vsr, &ldvsr,
             rconde, rcondv, work, &lwork, iwork, &liwork, bwork, &info );
     return info;
@@ -75,7 +75,7 @@
 // * double value-type.
 //
 inline std::ptrdiff_t ggesx( const char jobvsl, const char jobvsr,
- const char sort, external_t* selctg, const char sense,
+ const char sort, external_fp selctg, const char sense,
         const fortran_int_t n, double* a, const fortran_int_t lda, double* b,
         const fortran_int_t ldb, fortran_int_t& sdim, double* alphar,
         double* alphai, double* beta, double* vsl, const fortran_int_t ldvsl,
@@ -83,7 +83,7 @@
         double* rcondv, double* work, const fortran_int_t lwork,
         fortran_int_t* iwork, const fortran_int_t liwork, logical_t* bwork ) {
     fortran_int_t info(0);
- LAPACK_DGGESX( &jobvsl, &jobvsr, &sort, &selctg, &sense, &n, a, &lda, b,
+ LAPACK_DGGESX( &jobvsl, &jobvsr, &sort, selctg, &sense, &n, a, &lda, b,
             &ldb, &sdim, alphar, alphai, beta, vsl, &ldvsl, vsr, &ldvsr,
             rconde, rcondv, work, &lwork, iwork, &liwork, bwork, &info );
     return info;
@@ -95,7 +95,7 @@
 // * complex<float> value-type.
 //
 inline std::ptrdiff_t ggesx( const char jobvsl, const char jobvsr,
- const char sort, external_t* selctg, const char sense,
+ const char sort, external_fp selctg, const char sense,
         const fortran_int_t n, std::complex<float>* a,
         const fortran_int_t lda, std::complex<float>* b,
         const fortran_int_t ldb, fortran_int_t& sdim,
@@ -106,7 +106,7 @@
         float* rwork, fortran_int_t* iwork, const fortran_int_t liwork,
         logical_t* bwork ) {
     fortran_int_t info(0);
- LAPACK_CGGESX( &jobvsl, &jobvsr, &sort, &selctg, &sense, &n, a, &lda, b,
+ LAPACK_CGGESX( &jobvsl, &jobvsr, &sort, selctg, &sense, &n, a, &lda, b,
             &ldb, &sdim, alpha, beta, vsl, &ldvsl, vsr, &ldvsr, rconde,
             rcondv, work, &lwork, rwork, iwork, &liwork, bwork, &info );
     return info;
@@ -118,7 +118,7 @@
 // * complex<double> value-type.
 //
 inline std::ptrdiff_t ggesx( const char jobvsl, const char jobvsr,
- const char sort, external_t* selctg, const char sense,
+ const char sort, external_fp selctg, const char sense,
         const fortran_int_t n, std::complex<double>* a,
         const fortran_int_t lda, std::complex<double>* b,
         const fortran_int_t ldb, fortran_int_t& sdim,
@@ -129,7 +129,7 @@
         double* rwork, fortran_int_t* iwork, const fortran_int_t liwork,
         logical_t* bwork ) {
     fortran_int_t info(0);
- LAPACK_ZGGESX( &jobvsl, &jobvsr, &sort, &selctg, &sense, &n, a, &lda, b,
+ LAPACK_ZGGESX( &jobvsl, &jobvsr, &sort, selctg, &sense, &n, a, &lda, b,
             &ldb, &sdim, alpha, beta, vsl, &ldvsl, vsr, &ldvsr, rconde,
             rcondv, work, &lwork, rwork, iwork, &liwork, bwork, &info );
     return info;
@@ -163,7 +163,7 @@
             typename MatrixVSR, typename VectorRCONDE, typename VectorRCONDV,
             typename WORK, typename IWORK, typename BWORK >
     static std::ptrdiff_t invoke( const char jobvsl, const char jobvsr,
- const char sort, external_t* selctg, const char sense, MatrixA& a,
+ const char sort, external_fp selctg, const char sense, MatrixA& a,
             MatrixB& b, fortran_int_t& sdim, VectorALPHAR& alphar,
             VectorALPHAI& alphai, VectorBETA& beta, MatrixVSL& vsl,
             MatrixVSR& vsr, VectorRCONDE& rconde, VectorRCONDV& rcondv,
@@ -218,8 +218,8 @@
         BOOST_ASSERT( bindings::size(alphar) >= bindings::size_column(a) );
         BOOST_ASSERT( bindings::size(work.select(fortran_int_t())) >=
                 min_size_iwork( bindings::size_column(a), sense ));
- BOOST_ASSERT( bindings::size(work.select(bool())) >= min_size_bwork(
- bindings::size_column(a), sort ));
+ BOOST_ASSERT( bindings::size(work.select(logical_t())) >=
+ min_size_bwork( bindings::size_column(a), sort ));
         BOOST_ASSERT( bindings::size(work.select(real_type())) >=
                 min_size_work( bindings::size_column(a), sense ));
         BOOST_ASSERT( bindings::size_column(a) >= 0 );
@@ -253,7 +253,7 @@
                 bindings::size(work.select(real_type())),
                 bindings::begin_value(work.select(fortran_int_t())),
                 bindings::size(work.select(fortran_int_t())),
- bindings::begin_value(work.select(bool())) );
+ bindings::begin_value(work.select(logical_t())) );
     }
 
     //
@@ -267,7 +267,7 @@
             typename VectorALPHAI, typename VectorBETA, typename MatrixVSL,
             typename MatrixVSR, typename VectorRCONDE, typename VectorRCONDV >
     static std::ptrdiff_t invoke( const char jobvsl, const char jobvsr,
- const char sort, external_t* selctg, const char sense, MatrixA& a,
+ const char sort, external_fp selctg, const char sense, MatrixA& a,
             MatrixB& b, fortran_int_t& sdim, VectorALPHAR& alphar,
             VectorALPHAI& alphai, VectorBETA& beta, MatrixVSL& vsl,
             MatrixVSR& vsr, VectorRCONDE& rconde, VectorRCONDV& rcondv,
@@ -277,7 +277,7 @@
                 bindings::size_column(a), sense ) );
         bindings::detail::array< fortran_int_t > tmp_iwork(
                 min_size_iwork( bindings::size_column(a), sense ) );
- bindings::detail::array< bool > tmp_bwork( min_size_bwork(
+ bindings::detail::array< logical_t > tmp_bwork( min_size_bwork(
                 bindings::size_column(a), sort ) );
         return invoke( jobvsl, jobvsr, sort, selctg, sense, a, b, sdim,
                 alphar, alphai, beta, vsl, vsr, rconde, rcondv,
@@ -295,7 +295,7 @@
             typename VectorALPHAI, typename VectorBETA, typename MatrixVSL,
             typename MatrixVSR, typename VectorRCONDE, typename VectorRCONDV >
     static std::ptrdiff_t invoke( const char jobvsl, const char jobvsr,
- const char sort, external_t* selctg, const char sense, MatrixA& a,
+ const char sort, external_fp selctg, const char sense, MatrixA& a,
             MatrixB& b, fortran_int_t& sdim, VectorALPHAR& alphar,
             VectorALPHAI& alphai, VectorBETA& beta, MatrixVSL& vsl,
             MatrixVSR& vsr, VectorRCONDE& rconde, VectorRCONDV& rcondv,
@@ -304,7 +304,7 @@
         real_type opt_size_work;
         bindings::detail::array< fortran_int_t > tmp_iwork(
                 min_size_iwork( bindings::size_column(a), sense ) );
- bindings::detail::array< bool > tmp_bwork( min_size_bwork(
+ bindings::detail::array< logical_t > tmp_bwork( min_size_bwork(
                 bindings::size_column(a), sort ) );
         detail::ggesx( jobvsl, jobvsr, sort, selctg, sense,
                 bindings::size_column(a), bindings::begin_value(a),
@@ -383,7 +383,7 @@
             typename VectorRCONDE, typename VectorRCONDV, typename WORK,
             typename RWORK, typename IWORK, typename BWORK >
     static std::ptrdiff_t invoke( const char jobvsl, const char jobvsr,
- const char sort, external_t* selctg, const char sense, MatrixA& a,
+ const char sort, external_fp selctg, const char sense, MatrixA& a,
             MatrixB& b, fortran_int_t& sdim, VectorALPHA& alpha,
             VectorBETA& beta, MatrixVSL& vsl, MatrixVSR& vsr,
             VectorRCONDE& rconde, VectorRCONDV& rcondv, detail::workspace4<
@@ -429,8 +429,8 @@
         BOOST_ASSERT( bindings::size(beta) >= bindings::size_column(a) );
         BOOST_ASSERT( bindings::size(work.select(fortran_int_t())) >=
                 min_size_iwork( bindings::size_column(a), sense ));
- BOOST_ASSERT( bindings::size(work.select(bool())) >= min_size_bwork(
- bindings::size_column(a), sort ));
+ BOOST_ASSERT( bindings::size(work.select(logical_t())) >=
+ min_size_bwork( bindings::size_column(a), sort ));
         BOOST_ASSERT( bindings::size(work.select(real_type())) >=
                 min_size_rwork( bindings::size_column(a) ));
         BOOST_ASSERT( bindings::size(work.select(value_type())) >=
@@ -466,7 +466,7 @@
                 bindings::begin_value(work.select(real_type())),
                 bindings::begin_value(work.select(fortran_int_t())),
                 bindings::size(work.select(value_type())),
- bindings::begin_value(work.select(bool())) );
+ bindings::begin_value(work.select(logical_t())) );
     }
 
     //
@@ -480,7 +480,7 @@
             typename VectorBETA, typename MatrixVSL, typename MatrixVSR,
             typename VectorRCONDE, typename VectorRCONDV >
     static std::ptrdiff_t invoke( const char jobvsl, const char jobvsr,
- const char sort, external_t* selctg, const char sense, MatrixA& a,
+ const char sort, external_fp selctg, const char sense, MatrixA& a,
             MatrixB& b, fortran_int_t& sdim, VectorALPHA& alpha,
             VectorBETA& beta, MatrixVSL& vsl, MatrixVSR& vsr,
             VectorRCONDE& rconde, VectorRCONDV& rcondv, minimal_workspace ) {
@@ -491,7 +491,7 @@
                 bindings::size_column(a) ) );
         bindings::detail::array< fortran_int_t > tmp_iwork(
                 min_size_iwork( bindings::size_column(a), sense ) );
- bindings::detail::array< bool > tmp_bwork( min_size_bwork(
+ bindings::detail::array< logical_t > tmp_bwork( min_size_bwork(
                 bindings::size_column(a), sort ) );
         return invoke( jobvsl, jobvsr, sort, selctg, sense, a, b, sdim, alpha,
                 beta, vsl, vsr, rconde, rcondv, workspace( tmp_work,
@@ -509,7 +509,7 @@
             typename VectorBETA, typename MatrixVSL, typename MatrixVSR,
             typename VectorRCONDE, typename VectorRCONDV >
     static std::ptrdiff_t invoke( const char jobvsl, const char jobvsr,
- const char sort, external_t* selctg, const char sense, MatrixA& a,
+ const char sort, external_fp selctg, const char sense, MatrixA& a,
             MatrixB& b, fortran_int_t& sdim, VectorALPHA& alpha,
             VectorBETA& beta, MatrixVSL& vsl, MatrixVSR& vsr,
             VectorRCONDE& rconde, VectorRCONDV& rcondv, optimal_workspace ) {
@@ -519,7 +519,7 @@
                 bindings::size_column(a) ) );
         bindings::detail::array< fortran_int_t > tmp_iwork(
                 min_size_iwork( bindings::size_column(a), sense ) );
- bindings::detail::array< bool > tmp_bwork( min_size_bwork(
+ bindings::detail::array< logical_t > tmp_bwork( min_size_bwork(
                 bindings::size_column(a), sort ) );
         detail::ggesx( jobvsl, jobvsr, sort, selctg, sense,
                 bindings::size_column(a), bindings::begin_value(a),
@@ -610,7 +610,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, MatrixVSL& vsl, MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv, Workspace work ) {
@@ -633,7 +633,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, MatrixVSL& vsl, MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv ) {
@@ -658,7 +658,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, MatrixVSL& vsl, MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv, Workspace work ) {
@@ -681,7 +681,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, MatrixVSL& vsl, MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv ) {
@@ -706,7 +706,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, const MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, MatrixVSL& vsl, MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv, Workspace work ) {
@@ -729,7 +729,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, const MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, MatrixVSL& vsl, MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv ) {
@@ -754,7 +754,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a,
+ external_fp selctg, const char sense, const MatrixA& a,
         const MatrixB& b, fortran_int_t& sdim, VectorALPHAR& alphar,
         VectorALPHAI& alphai, VectorBETA& beta, MatrixVSL& vsl,
         MatrixVSR& vsr, VectorRCONDE& rconde, VectorRCONDV& rcondv,
@@ -778,7 +778,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a,
+ external_fp selctg, const char sense, const MatrixA& a,
         const MatrixB& b, fortran_int_t& sdim, VectorALPHAR& alphar,
         VectorALPHAI& alphai, VectorBETA& beta, MatrixVSL& vsl,
         MatrixVSR& vsr, VectorRCONDE& rconde, VectorRCONDV& rcondv ) {
@@ -803,7 +803,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, const MatrixVSL& vsl, MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv, Workspace work ) {
@@ -826,7 +826,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, const MatrixVSL& vsl, MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv ) {
@@ -851,7 +851,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, const MatrixVSL& vsl, MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv, Workspace work ) {
@@ -874,7 +874,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, const MatrixVSL& vsl, MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv ) {
@@ -899,7 +899,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, const MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, const MatrixVSL& vsl, MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv, Workspace work ) {
@@ -922,7 +922,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, const MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, const MatrixVSL& vsl, MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv ) {
@@ -947,7 +947,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a,
+ external_fp selctg, const char sense, const MatrixA& a,
         const MatrixB& b, fortran_int_t& sdim, VectorALPHAR& alphar,
         VectorALPHAI& alphai, VectorBETA& beta, const MatrixVSL& vsl,
         MatrixVSR& vsr, VectorRCONDE& rconde, VectorRCONDV& rcondv,
@@ -971,7 +971,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a,
+ external_fp selctg, const char sense, const MatrixA& a,
         const MatrixB& b, fortran_int_t& sdim, VectorALPHAR& alphar,
         VectorALPHAI& alphai, VectorBETA& beta, const MatrixVSL& vsl,
         MatrixVSR& vsr, VectorRCONDE& rconde, VectorRCONDV& rcondv ) {
@@ -996,7 +996,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, MatrixVSL& vsl, const MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv, Workspace work ) {
@@ -1019,7 +1019,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, MatrixVSL& vsl, const MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv ) {
@@ -1044,7 +1044,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, MatrixVSL& vsl, const MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv, Workspace work ) {
@@ -1067,7 +1067,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, MatrixVSL& vsl, const MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv ) {
@@ -1092,7 +1092,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, const MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, MatrixVSL& vsl, const MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv, Workspace work ) {
@@ -1115,7 +1115,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, const MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, MatrixVSL& vsl, const MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv ) {
@@ -1140,7 +1140,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a,
+ external_fp selctg, const char sense, const MatrixA& a,
         const MatrixB& b, fortran_int_t& sdim, VectorALPHAR& alphar,
         VectorALPHAI& alphai, VectorBETA& beta, MatrixVSL& vsl,
         const MatrixVSR& vsr, VectorRCONDE& rconde, VectorRCONDV& rcondv,
@@ -1164,7 +1164,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a,
+ external_fp selctg, const char sense, const MatrixA& a,
         const MatrixB& b, fortran_int_t& sdim, VectorALPHAR& alphar,
         VectorALPHAI& alphai, VectorBETA& beta, MatrixVSL& vsl,
         const MatrixVSR& vsr, VectorRCONDE& rconde, VectorRCONDV& rcondv ) {
@@ -1189,7 +1189,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, const MatrixVSL& vsl, const MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv, Workspace work ) {
@@ -1212,7 +1212,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, const MatrixVSL& vsl, const MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv ) {
@@ -1237,7 +1237,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, const MatrixVSL& vsl, const MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv, Workspace work ) {
@@ -1260,7 +1260,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, const MatrixVSL& vsl, const MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv ) {
@@ -1285,7 +1285,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, const MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, const MatrixVSL& vsl, const MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv, Workspace work ) {
@@ -1308,7 +1308,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, const MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, const MatrixVSL& vsl, const MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv ) {
@@ -1333,7 +1333,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a,
+ external_fp selctg, const char sense, const MatrixA& a,
         const MatrixB& b, fortran_int_t& sdim, VectorALPHAR& alphar,
         VectorALPHAI& alphai, VectorBETA& beta, const MatrixVSL& vsl,
         const MatrixVSR& vsr, VectorRCONDE& rconde, VectorRCONDV& rcondv,
@@ -1357,7 +1357,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a,
+ external_fp selctg, const char sense, const MatrixA& a,
         const MatrixB& b, fortran_int_t& sdim, VectorALPHAR& alphar,
         VectorALPHAI& alphai, VectorBETA& beta, const MatrixVSL& vsl,
         const MatrixVSR& vsr, VectorRCONDE& rconde, VectorRCONDV& rcondv ) {
@@ -1380,7 +1380,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         MatrixVSL& vsl, MatrixVSR& vsr, VectorRCONDE& rconde,
         VectorRCONDV& rcondv, Workspace work ) {
@@ -1403,7 +1403,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         MatrixVSL& vsl, MatrixVSR& vsr, VectorRCONDE& rconde,
         VectorRCONDV& rcondv ) {
@@ -1427,7 +1427,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         MatrixVSL& vsl, MatrixVSR& vsr, VectorRCONDE& rconde,
         VectorRCONDV& rcondv, Workspace work ) {
@@ -1450,7 +1450,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         MatrixVSL& vsl, MatrixVSR& vsr, VectorRCONDE& rconde,
         VectorRCONDV& rcondv ) {
@@ -1474,7 +1474,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, const MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         MatrixVSL& vsl, MatrixVSR& vsr, VectorRCONDE& rconde,
         VectorRCONDV& rcondv, Workspace work ) {
@@ -1497,7 +1497,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, const MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         MatrixVSL& vsl, MatrixVSR& vsr, VectorRCONDE& rconde,
         VectorRCONDV& rcondv ) {
@@ -1521,7 +1521,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a,
+ external_fp selctg, const char sense, const MatrixA& a,
         const MatrixB& b, fortran_int_t& sdim, VectorALPHA& alpha,
         VectorBETA& beta, MatrixVSL& vsl, MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv, Workspace work ) {
@@ -1544,7 +1544,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a,
+ external_fp selctg, const char sense, const MatrixA& a,
         const MatrixB& b, fortran_int_t& sdim, VectorALPHA& alpha,
         VectorBETA& beta, MatrixVSL& vsl, MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv ) {
@@ -1568,7 +1568,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         const MatrixVSL& vsl, MatrixVSR& vsr, VectorRCONDE& rconde,
         VectorRCONDV& rcondv, Workspace work ) {
@@ -1591,7 +1591,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         const MatrixVSL& vsl, MatrixVSR& vsr, VectorRCONDE& rconde,
         VectorRCONDV& rcondv ) {
@@ -1615,7 +1615,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         const MatrixVSL& vsl, MatrixVSR& vsr, VectorRCONDE& rconde,
         VectorRCONDV& rcondv, Workspace work ) {
@@ -1638,7 +1638,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         const MatrixVSL& vsl, MatrixVSR& vsr, VectorRCONDE& rconde,
         VectorRCONDV& rcondv ) {
@@ -1662,7 +1662,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, const MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         const MatrixVSL& vsl, MatrixVSR& vsr, VectorRCONDE& rconde,
         VectorRCONDV& rcondv, Workspace work ) {
@@ -1685,7 +1685,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, const MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         const MatrixVSL& vsl, MatrixVSR& vsr, VectorRCONDE& rconde,
         VectorRCONDV& rcondv ) {
@@ -1709,7 +1709,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a,
+ external_fp selctg, const char sense, const MatrixA& a,
         const MatrixB& b, fortran_int_t& sdim, VectorALPHA& alpha,
         VectorBETA& beta, const MatrixVSL& vsl, MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv, Workspace work ) {
@@ -1732,7 +1732,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a,
+ external_fp selctg, const char sense, const MatrixA& a,
         const MatrixB& b, fortran_int_t& sdim, VectorALPHA& alpha,
         VectorBETA& beta, const MatrixVSL& vsl, MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv ) {
@@ -1756,7 +1756,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         MatrixVSL& vsl, const MatrixVSR& vsr, VectorRCONDE& rconde,
         VectorRCONDV& rcondv, Workspace work ) {
@@ -1779,7 +1779,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         MatrixVSL& vsl, const MatrixVSR& vsr, VectorRCONDE& rconde,
         VectorRCONDV& rcondv ) {
@@ -1803,7 +1803,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         MatrixVSL& vsl, const MatrixVSR& vsr, VectorRCONDE& rconde,
         VectorRCONDV& rcondv, Workspace work ) {
@@ -1826,7 +1826,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         MatrixVSL& vsl, const MatrixVSR& vsr, VectorRCONDE& rconde,
         VectorRCONDV& rcondv ) {
@@ -1850,7 +1850,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, const MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         MatrixVSL& vsl, const MatrixVSR& vsr, VectorRCONDE& rconde,
         VectorRCONDV& rcondv, Workspace work ) {
@@ -1873,7 +1873,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, const MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         MatrixVSL& vsl, const MatrixVSR& vsr, VectorRCONDE& rconde,
         VectorRCONDV& rcondv ) {
@@ -1897,7 +1897,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a,
+ external_fp selctg, const char sense, const MatrixA& a,
         const MatrixB& b, fortran_int_t& sdim, VectorALPHA& alpha,
         VectorBETA& beta, MatrixVSL& vsl, const MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv, Workspace work ) {
@@ -1920,7 +1920,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a,
+ external_fp selctg, const char sense, const MatrixA& a,
         const MatrixB& b, fortran_int_t& sdim, VectorALPHA& alpha,
         VectorBETA& beta, MatrixVSL& vsl, const MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv ) {
@@ -1944,7 +1944,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         const MatrixVSL& vsl, const MatrixVSR& vsr, VectorRCONDE& rconde,
         VectorRCONDV& rcondv, Workspace work ) {
@@ -1967,7 +1967,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         const MatrixVSL& vsl, const MatrixVSR& vsr, VectorRCONDE& rconde,
         VectorRCONDV& rcondv ) {
@@ -1991,7 +1991,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         const MatrixVSL& vsl, const MatrixVSR& vsr, VectorRCONDE& rconde,
         VectorRCONDV& rcondv, Workspace work ) {
@@ -2014,7 +2014,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, const MatrixA& a, MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         const MatrixVSL& vsl, const MatrixVSR& vsr, VectorRCONDE& rconde,
         VectorRCONDV& rcondv ) {
@@ -2038,7 +2038,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, const MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         const MatrixVSL& vsl, const MatrixVSR& vsr, VectorRCONDE& rconde,
         VectorRCONDV& rcondv, Workspace work ) {
@@ -2061,7 +2061,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, const MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, const MatrixB& b,
         fortran_int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         const MatrixVSL& vsl, const MatrixVSR& vsr, VectorRCONDE& rconde,
         VectorRCONDV& rcondv ) {
@@ -2085,7 +2085,7 @@
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a,
+ external_fp selctg, const char sense, const MatrixA& a,
         const MatrixB& b, fortran_int_t& sdim, VectorALPHA& alpha,
         VectorBETA& beta, const MatrixVSL& vsl, const MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv, Workspace work ) {
@@ -2108,7 +2108,7 @@
 inline typename boost::disable_if< detail::is_workspace< VectorRCONDV >,
         std::ptrdiff_t >::type
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, const MatrixA& a,
+ external_fp selctg, const char sense, const MatrixA& a,
         const MatrixB& b, fortran_int_t& sdim, VectorALPHA& alpha,
         VectorBETA& beta, const MatrixVSL& vsl, const MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv ) {

Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ggevx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ggevx.hpp (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ggevx.hpp 2010-07-18 19:24:35 EDT (Sun, 18 Jul 2010)
@@ -236,8 +236,8 @@
         BOOST_ASSERT( bindings::size(alphar) >= bindings::size_column(a) );
         BOOST_ASSERT( bindings::size(work.select(fortran_int_t())) >=
                 min_size_iwork( sense, bindings::size_column(a) ));
- BOOST_ASSERT( bindings::size(work.select(bool())) >= min_size_bwork(
- sense, bindings::size_column(a) ));
+ BOOST_ASSERT( bindings::size(work.select(logical_t())) >=
+ min_size_bwork( sense, bindings::size_column(a) ));
         BOOST_ASSERT( bindings::size(work.select(real_type())) >=
                 min_size_work( balanc, jobvl, jobvr, sense,
                 bindings::size_column(a) ));
@@ -273,7 +273,7 @@
                 bindings::begin_value(work.select(real_type())),
                 bindings::size(work.select(real_type())),
                 bindings::begin_value(work.select(fortran_int_t())),
- bindings::begin_value(work.select(bool())) );
+ bindings::begin_value(work.select(logical_t())) );
     }
 
     //
@@ -299,7 +299,7 @@
                 jobvl, jobvr, sense, bindings::size_column(a) ) );
         bindings::detail::array< fortran_int_t > tmp_iwork(
                 min_size_iwork( sense, bindings::size_column(a) ) );
- bindings::detail::array< bool > tmp_bwork( min_size_bwork( sense,
+ bindings::detail::array< logical_t > tmp_bwork( min_size_bwork( sense,
                 bindings::size_column(a) ) );
         return invoke( balanc, jobvl, jobvr, sense, a, b, alphar, alphai,
                 beta, vl, vr, ilo, ihi, lscale, rscale, abnrm, bbnrm, rconde,
@@ -328,7 +328,7 @@
         real_type opt_size_work;
         bindings::detail::array< fortran_int_t > tmp_iwork(
                 min_size_iwork( sense, bindings::size_column(a) ) );
- bindings::detail::array< bool > tmp_bwork( min_size_bwork( sense,
+ bindings::detail::array< logical_t > tmp_bwork( min_size_bwork( sense,
                 bindings::size_column(a) ) );
         detail::ggevx( balanc, jobvl, jobvr, sense,
                 bindings::size_column(a), bindings::begin_value(a),
@@ -466,8 +466,8 @@
         BOOST_ASSERT( bindings::size(beta) >= bindings::size_column(a) );
         BOOST_ASSERT( bindings::size(work.select(fortran_int_t())) >=
                 min_size_iwork( sense, bindings::size_column(a) ));
- BOOST_ASSERT( bindings::size(work.select(bool())) >= min_size_bwork(
- sense, bindings::size_column(a) ));
+ BOOST_ASSERT( bindings::size(work.select(logical_t())) >=
+ min_size_bwork( sense, bindings::size_column(a) ));
         BOOST_ASSERT( bindings::size(work.select(real_type())) >=
                 min_size_rwork( balanc, bindings::size_column(a) ));
         BOOST_ASSERT( bindings::size(work.select(value_type())) >=
@@ -505,7 +505,7 @@
                 bindings::size(work.select(value_type())),
                 bindings::begin_value(work.select(real_type())),
                 bindings::begin_value(work.select(fortran_int_t())),
- bindings::begin_value(work.select(bool())) );
+ bindings::begin_value(work.select(logical_t())) );
     }
 
     //
@@ -533,7 +533,7 @@
                 balanc, bindings::size_column(a) ) );
         bindings::detail::array< fortran_int_t > tmp_iwork(
                 min_size_iwork( sense, bindings::size_column(a) ) );
- bindings::detail::array< bool > tmp_bwork( min_size_bwork( sense,
+ bindings::detail::array< logical_t > tmp_bwork( min_size_bwork( sense,
                 bindings::size_column(a) ) );
         return invoke( balanc, jobvl, jobvr, sense, a, b, alpha, beta, vl, vr,
                 ilo, ihi, lscale, rscale, abnrm, bbnrm, rconde, rcondv,
@@ -564,7 +564,7 @@
                 balanc, bindings::size_column(a) ) );
         bindings::detail::array< fortran_int_t > tmp_iwork(
                 min_size_iwork( sense, bindings::size_column(a) ) );
- bindings::detail::array< bool > tmp_bwork( min_size_bwork( sense,
+ bindings::detail::array< logical_t > tmp_bwork( min_size_bwork( sense,
                 bindings::size_column(a) ) );
         detail::ggevx( balanc, jobvl, jobvr, sense,
                 bindings::size_column(a), bindings::begin_value(a),

Modified: sandbox/numeric_bindings/boost/numeric/bindings/traits/type.h
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/traits/type.h (original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/traits/type.h 2010-07-18 19:24:35 EDT (Sun, 18 Jul 2010)
@@ -41,19 +41,4 @@
 
 #endif /* BOOST_NUMERIC_BINDINGS_USE_COMPLEX_STRUCT */
 
-/*
- * Define a fortran LOGICAL as a bool (for now).
- */
-
-typedef bool logical_t ;
-
-/*
- * Define a fortran EXTERNAL as void, so that the argument type is void*
- * and one can pass a function pointer. These functions return bool,
- * but they don't all take the same type of arguments. So there is no
- * function pointer definition that would work for all cases.
- */
-
-typedef void external_t ;
-
 #endif /* BOOST_NUMERIC_BINDINGS_TRAITS_TYPE_H */

Modified: sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/driver/gees.qbk
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/driver/gees.qbk (original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/driver/gees.qbk 2010-07-18 19:24:35 EDT (Sun, 18 Jul 2010)
@@ -9,12 +9,12 @@
 [heading Prototype]
 There are two prototypes of `gees` available, please see below.
 ``
-gees( const char jobvs, const char sort, external_t* select, MatrixA& a,
+gees( const char jobvs, const char sort, external_fp select, MatrixA& a,
         int_t& sdim, VectorWR& wr, VectorWI& wi, MatrixVS& vs );
 ``
 
 ``
-gees( const char jobvs, const char sort, external_t* select, MatrixA& a,
+gees( const char jobvs, const char sort, external_fp select, MatrixA& a,
         int_t& sdim, VectorW& w, MatrixVS& vs );
 ``
 

Modified: sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/driver/geesx.qbk
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/driver/geesx.qbk (original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/driver/geesx.qbk 2010-07-18 19:24:35 EDT (Sun, 18 Jul 2010)
@@ -9,13 +9,13 @@
 [heading Prototype]
 There are two prototypes of `geesx` available, please see below.
 ``
-geesx( const char jobvs, const char sort, external_t* select,
+geesx( const char jobvs, const char sort, external_fp select,
         const char sense, MatrixA& a, int_t& sdim, VectorWR& wr,
         VectorWI& wi, MatrixVS& vs, Scalar >, Scalar > );
 ``
 
 ``
-geesx( const char jobvs, const char sort, external_t* select,
+geesx( const char jobvs, const char sort, external_fp select,
         const char sense, MatrixA& a, int_t& sdim, VectorW& w,
         MatrixVS& vs, Scalar >, Scalar > );
 ``

Modified: sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/driver/gges.qbk
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/driver/gges.qbk (original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/driver/gges.qbk 2010-07-18 19:24:35 EDT (Sun, 18 Jul 2010)
@@ -10,14 +10,14 @@
 There are two prototypes of `gges` available, please see below.
 ``
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, MatrixB& b, int_t& sdim,
+ external_fp selctg, MatrixA& a, MatrixB& b, int_t& sdim,
         VectorALPHAR& alphar, VectorALPHAI& alphai, VectorBETA& beta,
         MatrixVSL& vsl, MatrixVSR& vsr );
 ``
 
 ``
 gges( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, MatrixA& a, MatrixB& b, int_t& sdim,
+ external_fp selctg, MatrixA& a, MatrixB& b, int_t& sdim,
         VectorALPHA& alpha, VectorBETA& beta, MatrixVSL& vsl, MatrixVSR& vsr );
 ``
 

Modified: sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/driver/ggesx.qbk
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/driver/ggesx.qbk (original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/doc/lapack/driver/ggesx.qbk 2010-07-18 19:24:35 EDT (Sun, 18 Jul 2010)
@@ -10,7 +10,7 @@
 There are two prototypes of `ggesx` available, please see below.
 ``
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, MatrixB& b,
         int_t& sdim, VectorALPHAR& alphar, VectorALPHAI& alphai,
         VectorBETA& beta, MatrixVSL& vsl, MatrixVSR& vsr,
         VectorRCONDE& rconde, VectorRCONDV& rcondv );
@@ -18,7 +18,7 @@
 
 ``
 ggesx( const char jobvsl, const char jobvsr, const char sort,
- external_t* selctg, const char sense, MatrixA& a, MatrixB& b,
+ external_fp selctg, const char sense, MatrixA& a, MatrixB& b,
         int_t& sdim, VectorALPHA& alpha, VectorBETA& beta,
         MatrixVSL& vsl, MatrixVSR& vsr, VectorRCONDE& rconde,
         VectorRCONDV& rcondv );

Modified: sandbox/numeric_bindings/libs/numeric/bindings/lapack/test/hseqr.cpp
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/lapack/test/hseqr.cpp (original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/lapack/test/hseqr.cpp 2010-07-18 19:24:35 EDT (Sun, 18 Jul 2010)
@@ -102,7 +102,7 @@
     ublas::matrix<complex<double>, ublas::column_major> cVR(cZ);
     boost::numeric::bindings::detail::array<complex<double> > work_c(2*n);
     boost::numeric::bindings::detail::array<double> work_r(n);
- ublas::vector<bool> select_dummy(n);
+ ublas::vector<logical_t> select_dummy(n);
     fortran_int_t m_info(n+1);
     lapack::trevc( tag::both(),'B',select_dummy,G,cVL,cVR,n,m_info,lapack::workspace(work_c,work_r));
 

Modified: sandbox/numeric_bindings/libs/numeric/bindings/lapack/test/ublas_gees.cpp
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/lapack/test/ublas_gees.cpp (original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/lapack/test/ublas_gees.cpp 2010-07-18 19:24:35 EDT (Sun, 18 Jul 2010)
@@ -32,7 +32,7 @@
   template< typename MatrixA, typename VectorW, typename MatrixVS,
         typename Workspace >
   static inline std::ptrdiff_t gees( const char jobvs, const char sort,
- logical_t* select, MatrixA& a, fortran_int_t& sdim, VectorW& w,
+ external_fp select, MatrixA& a, fortran_int_t& sdim, VectorW& w,
         MatrixVS& vs, Workspace work ) {
     typedef typename bindings::value_type< MatrixA >::type value_type;
     bindings::detail::array<value_type> wr(bindings::size(w));
@@ -50,7 +50,7 @@
   template< typename MatrixA, typename VectorW, typename MatrixVS,
         typename Workspace >
   static inline std::ptrdiff_t gees( const char jobvs, const char sort,
- logical_t* select, MatrixA& a, fortran_int_t& sdim, VectorW& w,
+ external_fp select, MatrixA& a, fortran_int_t& sdim, VectorW& w,
         MatrixVS& vs, Workspace work ) {
     return lapack::gees( jobvs, sort, select, a, sdim, w, vs, work );
   }
@@ -74,6 +74,38 @@
 } // randomize()
 
 
+template< typename T >
+struct dispatch_select
+{
+};
+template<>
+struct dispatch_select<float>
+{
+ static logical_t my_select(float* w_real, float* w_imag) {
+ return *w_real > std::abs(*w_imag);
+ }
+};
+template<>
+struct dispatch_select<double>
+{
+ static logical_t my_select(double* w_real, double* w_imag) {
+ return *w_real > std::abs(*w_imag);
+ }
+};
+template<>
+struct dispatch_select<std::complex<float> >
+{
+ static logical_t my_select(std::complex<float>* w) {
+ return w->real() > std::abs(w->imag());
+ }
+};
+template<>
+struct dispatch_select<std::complex<double> >
+{
+ static logical_t my_select(std::complex<double>* w) {
+ return w->real() > std::abs(w->imag());
+ }
+};
 
 
 template <typename T, typename W>
@@ -94,17 +126,17 @@
 
    randomize( a );
    matrix_type a2( a );
- logical_t* select = 0;
+ external_fp select = reinterpret_cast<external_fp>(dispatch_select<T>::my_select);
    fortran_int_t sdim_info(0);
    // Compute Schur decomposition.
- apply_t::gees( 'V', 'N', select, a, sdim_info, e1, z, workspace ) ;
+ apply_t::gees( 'V', 'S', select, a, sdim_info, e1, z, workspace ) ;
 
    // Check Schur factorization
    if (norm_frobenius( prod( a2, z ) - prod( z, a ) )
>= safety_factor*10.0* norm_frobenius( a2 ) * std::numeric_limits< real_type >::epsilon() ) return 255 ;
 
    matrix_type z_dummy( 1, 1 );
- apply_t::gees( 'N', 'N', select, a2, sdim_info, e2, z_dummy, workspace ) ;
+ apply_t::gees( 'N', 'S', select, a2, sdim_info, e2, z_dummy, workspace ) ;
    if (norm_2( e1 - e2 ) > safety_factor*norm_2( e1 ) * std::numeric_limits< real_type >::epsilon()) return 255 ;
 
    if (norm_frobenius( a2 - a )
@@ -118,12 +150,12 @@
 template <typename T>
 struct Workspace {
    typedef ublas::vector<T> array_type ;
- typedef ublas::vector< bool > bool_array_type ;
+ typedef ublas::vector< logical_t > bool_array_type ;
    typedef lapack::detail::workspace2< array_type,bool_array_type > type ;
 
    Workspace(size_t n)
    : work_( 3*n )
- , bwork_(1)
+ , bwork_( n )
    {}
 
    type operator() () {
@@ -139,13 +171,13 @@
 struct Workspace< std::complex<T> > {
    typedef ublas::vector<T> real_array_type ;
    typedef ublas::vector< std::complex<T> > complex_array_type ;
- typedef ublas::vector< bool > bool_array_type ;
+ typedef ublas::vector< logical_t > bool_array_type ;
    typedef lapack::detail::workspace3< complex_array_type,real_array_type,bool_array_type > type ;
 
    Workspace(size_t n)
    : work_( 2*n )
    , rwork_( n )
- , bwork_(1)
+ , bwork_( n )
    {}
 
    type operator() () {

Modified: sandbox/numeric_bindings/libs/numeric/bindings/tools/netlib.py
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/tools/netlib.py (original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/tools/netlib.py 2010-07-18 19:24:35 EDT (Sun, 18 Jul 2010)
@@ -27,7 +27,7 @@
   'CHARACTER': 'char',
   'CHARACTER*1': 'char',
   'LOGICAL': 'logical_t',
- 'EXTERNAL': 'external_t',
+ 'EXTERNAL': 'external_fp',
   'INTEGER': library_integer_type,
   'REAL': 'float',
   'DOUBLE PRECISION': 'double' }
@@ -69,7 +69,8 @@
   result = m_type_map[ properties[ 'value_type' ] ];
   if properties[ 'io' ] == [ 'input' ]:
     result = 'const ' + result
- result += '*'
+ if properties[ 'io' ] != [ 'external procedure' ]:
+ result += '*'
   result += ' ' + name.lower() # is this really needed?
   
   return result
@@ -88,7 +89,7 @@
     if properties[ 'io' ] == [ 'input' ]:
       result = 'const ' + result
     elif properties[ 'io' ] == [ 'external procedure' ]:
- result += '*'
+ result += ''
     else:
       result += '&'
     
@@ -158,6 +159,8 @@
     if properties[ 'value_type' ][ 0:7] == 'COMPLEX' or \
        properties[ 'value_type' ] == 'DOUBLE COMPLEX':
       result = '&' + name.lower() + ''
+ elif properties[ 'io' ] == [ 'external procedure' ]:
+ result = name.lower()
     else:
       result = '&' + name.lower()
   
@@ -557,7 +560,7 @@
     if properties[ 'value_type' ] == 'INTEGER':
       result = library_integer_type
     elif properties[ 'value_type' ] == 'LOGICAL':
- result = 'bool'
+ result = 'logical_t'
     elif properties[ 'value_type' ] == 'REAL' or properties[ 'value_type' ] == 'DOUBLE PRECISION':
       result = 'real_type'
     else:


Boost-Commit list run by bdawes at acm.org, david.abrahams at rcn.com, gregod at cs.rpi.edu, cpdaniel at pacbell.net, john at johnmaddock.co.uk