$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r59139 - in sandbox/numeric_bindings: boost/numeric/bindings boost/numeric/bindings/blas/level2 boost/numeric/bindings/blas/level3 boost/numeric/bindings/detail boost/numeric/bindings/lapack/auxiliary boost/numeric/bindings/lapack/computational boost/numeric/bindings/lapack/detail boost/numeric/bindings/lapack/driver boost/numeric/bindings/std boost/numeric/bindings/ublas libs/numeric/bindings libs/numeric/bindings/atlas libs/numeric/bindings/lapack/test libs/numeric/bindings/tools libs/numeric/bindings/tools/templates libs/numeric/bindings/tools/templates/computational
From: rutger_at_[hidden]
Date: 2010-01-19 09:48:52
Author: rutger
Date: 2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
New Revision: 59139
URL: http://svn.boost.org/trac/boost/changeset/59139
Log:
introduced template-based tags in both generators, ported atlas regressions
Added:
   sandbox/numeric_bindings/boost/numeric/bindings/at.hpp   (contents, props changed)
   sandbox/numeric_bindings/boost/numeric/bindings/detail/if_left.hpp   (contents, props changed)
Text files modified: 
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gbmv.hpp                 |    90 +-                                      
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gemv.hpp                 |    94 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/ger.hpp                  |    40                                         
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gerc.hpp                 |    28                                         
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/geru.hpp                 |    28                                         
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hbmv.hpp                 |    50                                         
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hemv.hpp                 |    28                                         
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her.hpp                  |    34                                         
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her2.hpp                 |    32                                         
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpmv.hpp                 |    40                                         
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr.hpp                  |    28                                         
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr2.hpp                 |    28                                         
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/sbmv.hpp                 |    44                                         
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spmv.hpp                 |    38                                         
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr.hpp                  |    26                                         
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr2.hpp                 |    34                                         
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/symv.hpp                 |    38                                         
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr.hpp                  |    30                                         
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr2.hpp                 |    38                                         
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbmv.hpp                 |    62                                         
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbsv.hpp                 |    62                                         
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpmv.hpp                 |    63                                         
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpsv.hpp                 |    63                                         
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trmv.hpp                 |    70                                         
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trsv.hpp                 |    70                                         
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/gemm.hpp                 |    90 +-                                      
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/hemm.hpp                 |    90 +-                                      
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/her2k.hpp                |    58                                         
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/herk.hpp                 |    36                                         
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/symm.hpp                 |   164 ++-                                     
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syr2k.hpp                |    98 +-                                      
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syrk.hpp                 |    90 +-                                      
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trmm.hpp                 |   189 ++--                                    
   sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trsm.hpp                 |   195 ++--                                    
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/langb.hpp           |     3                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lange.hpp           |     3                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lanhb.hpp           |    17                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lanhe.hpp           |    14                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lanhp.hpp           |    11                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lanhs.hpp           |     3                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lansb.hpp           |    29                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lansp.hpp           |    19                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lansy.hpp           |    24                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lantb.hpp           |    11                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lantp.hpp           |    11                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lantr.hpp           |    11                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/larf.hpp            |    94 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/larfb.hpp           |   134 +-                                      
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/larfx.hpp           |    94 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbrfs.hpp       |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbtrs.hpp       |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gebak.hpp       |    42                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gehrd.hpp       |     6                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gerfs.hpp       |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gerqf.hpp       |     6                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/getrs.hpp       |    32                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggbak.hpp       |    50                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggbal.hpp       |     6                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggqrf.hpp       |     6                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggrqf.hpp       |     6                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gtrfs.hpp       |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gttrs.hpp       |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hbgst.hpp       |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hbtrd.hpp       |    17                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hecon.hpp       |     4                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hegst.hpp       |     4                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/herfs.hpp       |     4                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetrd.hpp       |     4                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetrf.hpp       |     4                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetri.hpp       |     4                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetrs.hpp       |     4                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hpcon.hpp       |     4                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hprfs.hpp       |     4                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hptrd.hpp       |     4                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hptrf.hpp       |     4                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hptri.hpp       |     4                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hptrs.hpp       |     4                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hsein.hpp       |  1684 ++++++++++++++++++++------------------- 
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/larz.hpp        |    94 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/latrd.hpp       |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/latrs.hpp       |    30                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/opmtr.hpp       |    68                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orghr.hpp       |     3                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orgtr.hpp       |     4                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormbr.hpp       |    80 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormhr.hpp       |    71                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormlq.hpp       |    78                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormql.hpp       |    78                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormqr.hpp       |    78                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormrq.hpp       |    78                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormrz.hpp       |    73                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormtr.hpp       |    80                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbequ.hpp       |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbrfs.hpp       |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbstf.hpp       |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbtrf.hpp       |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pftrs.hpp       |    26                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pocon.hpp       |    16                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/porfs.hpp       |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/potrf.hpp       |    24                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/potri.hpp       |    24                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/potrs.hpp       |    30                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ppcon.hpp       |    13                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ppequ.hpp       |    12                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pprfs.hpp       |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pptrf.hpp       |    10                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pptri.hpp       |    10                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pptrs.hpp       |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sbgst.hpp       |    18                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sbtrd.hpp       |    15                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/spcon.hpp       |    16                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sprfs.hpp       |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sptrd.hpp       |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sptrf.hpp       |    10                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sptri.hpp       |    10                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sptrs.hpp       |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/stedc.hpp       |     9                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sycon.hpp       |    14                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sygst.hpp       |     4                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/syrfs.hpp       |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytrd.hpp       |     4                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytrf.hpp       |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytri.hpp       |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytrs.hpp       |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tbcon.hpp       |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tbrfs.hpp       |    48                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tbtrs.hpp       |    32                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgevc.hpp       |   121 +-                                      
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgsen.hpp       |    12                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgsna.hpp       |    12                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgsyl.hpp       |    14                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tpcon.hpp       |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tprfs.hpp       |    40                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tptri.hpp       |    14                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tptrs.hpp       |    26                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trcon.hpp       |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trevc.hpp       |   259 +++---                                  
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trrfs.hpp       |    44                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trsen.hpp       |     3                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trsna.hpp       |    12                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trtri.hpp       |    34                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trtrs.hpp       |    30                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tzrzf.hpp       |     6                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unghr.hpp       |     3                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ungtr.hpp       |    14                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmbr.hpp       |    87 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmhr.hpp       |    71                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmlq.hpp       |    71                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmql.hpp       |    71                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmqr.hpp       |    71                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmrq.hpp       |    71                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmrz.hpp       |    80 +                                       
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmtr.hpp       |    73                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/upmtr.hpp       |    62                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/detail/lapack_option.hpp      |    31                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/cgesv.hpp              |     1                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/cposv.hpp              |     5                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gbsvx.hpp              |    16                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gejsv.hpp              |    15                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gels.hpp               |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gesvx.hpp              |    48                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gtsvx.hpp              |    63                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbev.hpp               |    18                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbevd.hpp              |    26                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbevx.hpp              |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbgv.hpp               |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbgvd.hpp              |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbgvx.hpp              |    40                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heev.hpp               |    15                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heevd.hpp              |    20                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heevr.hpp              |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heevx.hpp              |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hegv.hpp               |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hegvd.hpp              |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hegvx.hpp              |    18                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hesv.hpp               |     4                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hesvx.hpp              |    33                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpev.hpp               |    14                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpevd.hpp              |    22                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpevx.hpp              |    20                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpgv.hpp               |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpgvd.hpp              |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpgvx.hpp              |     4                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpsv.hpp               |     4                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpsvx.hpp              |    27                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/pbsv.hpp               |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/pbsvx.hpp              |    44                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/posv.hpp               |    28                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/posvx.hpp              |    40                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ppsv.hpp               |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ppsvx.hpp              |    37                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbev.hpp               |    14                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbevd.hpp              |    18                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbevx.hpp              |    28                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbgv.hpp               |    18                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbgvd.hpp              |    22                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbgvx.hpp              |    32                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sgesv.hpp              |     3                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spev.hpp               |    11                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spevd.hpp              |    16                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spevx.hpp              |    22                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spgv.hpp               |    12                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spgvd.hpp              |    18                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spgvx.hpp              |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sposv.hpp              |     5                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spsv.hpp               |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spsvx.hpp              |    49                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syev.hpp               |    12                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syevd.hpp              |    12                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syevr.hpp              |    28                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syevx.hpp              |    24                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sygv.hpp               |    16                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sygvd.hpp              |    18                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sygvx.hpp              |     4                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sysv.hpp               |     8                                         
   sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sysvx.hpp              |    59                                         
   sandbox/numeric_bindings/boost/numeric/bindings/std/valarray.hpp                     |    12                                         
   sandbox/numeric_bindings/boost/numeric/bindings/tag.hpp                              |     1                                         
   sandbox/numeric_bindings/boost/numeric/bindings/ublas/hermitian.hpp                  |     3                                         
   sandbox/numeric_bindings/boost/numeric/bindings/ublas/matrix.hpp                     |    27                                         
   sandbox/numeric_bindings/boost/numeric/bindings/ublas/symmetric.hpp                  |     3                                         
   sandbox/numeric_bindings/boost/numeric/bindings/ublas/vector.hpp                     |    22                                         
   sandbox/numeric_bindings/libs/numeric/bindings/atlas/others.cc                       |    39                                         
   sandbox/numeric_bindings/libs/numeric/bindings/atlas/tnt2.cc                         |    30                                         
   sandbox/numeric_bindings/libs/numeric/bindings/atlas/tnt3.cc                         |    18                                         
   sandbox/numeric_bindings/libs/numeric/bindings/atlas/tnt_gesv.cc                     |     6                                         
   sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_cmatr3.cc                 |    18                                         
   sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_gesv.cc                   |    40                                         
   sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_gesv2.cc                  |    26                                         
   sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_gesv3.cc                  |    12                                         
   sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_gesv4.cc                  |    20                                         
   sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_gesv5.cc                  |    31                                         
   sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_getrf_getrs.cc            |    28                                         
   sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_getri.cc                  |    22                                         
   sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_herm3.cc                  |    27                                         
   sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_herm3h2k.cc               |    27                                         
   sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_herm3herk.cc              |    27                                         
   sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_matr3.cc                  |    31                                         
   sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_posv.cc                   |    46                                         
   sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_potrf_potrs.cc            |    47                                         
   sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_potri.cc                  |    47                                         
   sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_symm2syr.cc               |    47                                         
   sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_symm3.cc                  |    27                                         
   sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_symm32.cc                 |    27                                         
   sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_symm33.cc                 |    27                                         
   sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_symm3s2k.cc               |    35                                         
   sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_symm3syrk.cc              |    27                                         
   sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_symmc3.cc                 |    27                                         
   sandbox/numeric_bindings/libs/numeric/bindings/atlas/utils.h                         |    36                                         
   sandbox/numeric_bindings/libs/numeric/bindings/lapack/test/hseqr.cpp                 |     3                                         
   sandbox/numeric_bindings/libs/numeric/bindings/lapack/test/ublas_geqrf.cpp           |    13                                         
   sandbox/numeric_bindings/libs/numeric/bindings/numeric-bindings.jam                  |     2                                         
   sandbox/numeric_bindings/libs/numeric/bindings/tools/blas_generator.py               |    10                                         
   sandbox/numeric_bindings/libs/numeric/bindings/tools/cblas.py                        |     4                                         
   sandbox/numeric_bindings/libs/numeric/bindings/tools/lapack_generator.py             |    13                                         
   sandbox/numeric_bindings/libs/numeric/bindings/tools/netlib.py                       |    63 +                                       
   sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/computational/orm.hpp |    49                                         
   sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/computational/un.hpp  |    56                                         
   sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/lapack.hpp            |     3                                         
   259 files changed, 5023 insertions(+), 4416 deletions(-)
Added: sandbox/numeric_bindings/boost/numeric/bindings/at.hpp
==============================================================================
--- (empty file)
+++ sandbox/numeric_bindings/boost/numeric/bindings/at.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -0,0 +1,71 @@
+//
+// Copyright (c) 2009 Rutger ter Borg
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_NUMERIC_BINDINGS_AT_HPP
+#define BOOST_NUMERIC_BINDINGS_AT_HPP
+
+#include <boost/numeric/bindings/detail/offset.hpp>
+
+namespace boost {
+namespace numeric {
+namespace bindings {
+namespace detail {
+
+template< typename T, typename Enable = void >
+struct at_impl {
+
+    typedef typename bindings::value_type<T>::type& result_type;
+
+    // TODO implement other array structures such as triangular, band, etc.
+    static result_type invoke( T& t, const std::ptrdiff_t i1, std::ptrdiff_t i2 ) {
+        return t( i1, i2 );
+    }
+
+};
+
+template< typename T >
+struct at_impl< T, typename boost::enable_if< bindings::has_linear_array<T> >::type > {
+
+    typedef typename bindings::value_type<T>::type& result_type;
+
+    static result_type invoke( T& t, const std::ptrdiff_t i1 ) {
+        return *( bindings::begin_value(t) + offset(t,i1) );
+    }
+
+    static result_type invoke( T& t, const std::ptrdiff_t i1, std::ptrdiff_t i2 ) {
+        return *( bindings::begin_value(t) + offset(t,i1,i2) );
+    }
+
+};
+
+}
+
+namespace result_of {
+
+template< typename T >
+struct at {
+    typedef typename detail::at_impl<T>::result_type type;
+};
+
+}
+
+template< typename T >
+typename result_of::at<T>::type at( T& t, const std::ptrdiff_t i1 ) {
+    return detail::at_impl<T>::invoke( t, i1 );
+}
+
+template< typename T >
+typename result_of::at<T>::type at( T& t, const std::ptrdiff_t i1, const std::ptrdiff_t i2 ) {
+    return detail::at_impl<T>::invoke( t, i1, i2 );
+}
+
+} // bindings
+} // numeric
+} // boost
+
+#endif
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gbmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gbmv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gbmv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -64,10 +64,10 @@
 // * float value-type.
 //
 template< typename Order, typename Trans >
-inline void gbmv( Order, Trans, const int m, const int n, const int kl,
-        const int ku, const float alpha, const float* a, const int lda,
-        const float* x, const int incx, const float beta, float* y,
-        const int incy ) {
+inline void gbmv( const Order order, const Trans trans, const int m,
+        const int n, const int kl, const int ku, const float alpha,
+        const float* a, const int lda, const float* x, const int incx,
+        const float beta, float* y, const int incy ) {
     cblas_sgbmv( cblas_option< Order >::value, cblas_option< Trans >::value,
             m, n, kl, ku, alpha, a, lda, x, incx, beta, y, incy );
 }
@@ -78,10 +78,10 @@
 // * double value-type.
 //
 template< typename Order, typename Trans >
-inline void gbmv( Order, Trans, const int m, const int n, const int kl,
-        const int ku, const double alpha, const double* a, const int lda,
-        const double* x, const int incx, const double beta, double* y,
-        const int incy ) {
+inline void gbmv( const Order order, const Trans trans, const int m,
+        const int n, const int kl, const int ku, const double alpha,
+        const double* a, const int lda, const double* x, const int incx,
+        const double beta, double* y, const int incy ) {
     cblas_dgbmv( cblas_option< Order >::value, cblas_option< Trans >::value,
             m, n, kl, ku, alpha, a, lda, x, incx, beta, y, incy );
 }
@@ -92,10 +92,10 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename Trans >
-inline void gbmv( Order, Trans, const int m, const int n, const int kl,
-        const int ku, const std::complex<float> alpha,
-        const std::complex<float>* a, const int lda,
-        const std::complex<float>* x, const int incx,
+inline void gbmv( const Order order, const Trans trans, const int m,
+        const int n, const int kl, const int ku,
+        const std::complex<float> alpha, const std::complex<float>* a,
+        const int lda, const std::complex<float>* x, const int incx,
         const std::complex<float> beta, std::complex<float>* y,
         const int incy ) {
     cblas_cgbmv( cblas_option< Order >::value, cblas_option< Trans >::value,
@@ -108,10 +108,10 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename Trans >
-inline void gbmv( Order, Trans, const int m, const int n, const int kl,
-        const int ku, const std::complex<double> alpha,
-        const std::complex<double>* a, const int lda,
-        const std::complex<double>* x, const int incx,
+inline void gbmv( const Order order, const Trans trans, const int m,
+        const int n, const int kl, const int ku,
+        const std::complex<double> alpha, const std::complex<double>* a,
+        const int lda, const std::complex<double>* x, const int incx,
         const std::complex<double> beta, std::complex<double>* y,
         const int incy ) {
     cblas_zgbmv( cblas_option< Order >::value, cblas_option< Trans >::value,
@@ -125,10 +125,10 @@
 // * float value-type.
 //
 template< typename Order, typename Trans >
-inline void gbmv( Order, Trans, const int m, const int n, const int kl,
-        const int ku, const float alpha, const float* a, const int lda,
-        const float* x, const int incx, const float beta, float* y,
-        const int incy ) {
+inline void gbmv( const Order order, const Trans trans, const int m,
+        const int n, const int kl, const int ku, const float alpha,
+        const float* a, const int lda, const float* x, const int incx,
+        const float beta, float* y, const int incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasSgbmv( blas_option< Trans >::value, m, n, kl, ku, alpha, a, lda, x,
             incx, beta, y, incy );
@@ -140,10 +140,10 @@
 // * double value-type.
 //
 template< typename Order, typename Trans >
-inline void gbmv( Order, Trans, const int m, const int n, const int kl,
-        const int ku, const double alpha, const double* a, const int lda,
-        const double* x, const int incx, const double beta, double* y,
-        const int incy ) {
+inline void gbmv( const Order order, const Trans trans, const int m,
+        const int n, const int kl, const int ku, const double alpha,
+        const double* a, const int lda, const double* x, const int incx,
+        const double beta, double* y, const int incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     // NOT FOUND();
 }
@@ -154,10 +154,10 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename Trans >
-inline void gbmv( Order, Trans, const int m, const int n, const int kl,
-        const int ku, const std::complex<float> alpha,
-        const std::complex<float>* a, const int lda,
-        const std::complex<float>* x, const int incx,
+inline void gbmv( const Order order, const Trans trans, const int m,
+        const int n, const int kl, const int ku,
+        const std::complex<float> alpha, const std::complex<float>* a,
+        const int lda, const std::complex<float>* x, const int incx,
         const std::complex<float> beta, std::complex<float>* y,
         const int incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
@@ -171,10 +171,10 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename Trans >
-inline void gbmv( Order, Trans, const int m, const int n, const int kl,
-        const int ku, const std::complex<double> alpha,
-        const std::complex<double>* a, const int lda,
-        const std::complex<double>* x, const int incx,
+inline void gbmv( const Order order, const Trans trans, const int m,
+        const int n, const int kl, const int ku,
+        const std::complex<double> alpha, const std::complex<double>* a,
+        const int lda, const std::complex<double>* x, const int incx,
         const std::complex<double> beta, std::complex<double>* y,
         const int incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
@@ -188,10 +188,10 @@
 // * float value-type.
 //
 template< typename Order, typename Trans >
-inline void gbmv( Order, Trans, const fortran_int_t m, const fortran_int_t n,
-        const fortran_int_t kl, const fortran_int_t ku, const float alpha,
-        const float* a, const fortran_int_t lda, const float* x,
-        const fortran_int_t incx, const float beta, float* y,
+inline void gbmv( const Order order, const Trans trans, const fortran_int_t m,
+        const fortran_int_t n, const fortran_int_t kl, const fortran_int_t ku,
+        const float alpha, const float* a, const fortran_int_t lda,
+        const float* x, const fortran_int_t incx, const float beta, float* y,
         const fortran_int_t incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_SGBMV( &blas_option< Trans >::value, &m, &n, &kl, &ku, &alpha, a,
@@ -204,11 +204,11 @@
 // * double value-type.
 //
 template< typename Order, typename Trans >
-inline void gbmv( Order, Trans, const fortran_int_t m, const fortran_int_t n,
-        const fortran_int_t kl, const fortran_int_t ku, const double alpha,
-        const double* a, const fortran_int_t lda, const double* x,
-        const fortran_int_t incx, const double beta, double* y,
-        const fortran_int_t incy ) {
+inline void gbmv( const Order order, const Trans trans, const fortran_int_t m,
+        const fortran_int_t n, const fortran_int_t kl, const fortran_int_t ku,
+        const double alpha, const double* a, const fortran_int_t lda,
+        const double* x, const fortran_int_t incx, const double beta,
+        double* y, const fortran_int_t incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_DGBMV( &blas_option< Trans >::value, &m, &n, &kl, &ku, &alpha, a,
             &lda, x, &incx, &beta, y, &incy );
@@ -220,8 +220,8 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename Trans >
-inline void gbmv( Order, Trans, const fortran_int_t m, const fortran_int_t n,
-        const fortran_int_t kl, const fortran_int_t ku,
+inline void gbmv( const Order order, const Trans trans, const fortran_int_t m,
+        const fortran_int_t n, const fortran_int_t kl, const fortran_int_t ku,
         const std::complex<float> alpha, const std::complex<float>* a,
         const fortran_int_t lda, const std::complex<float>* x,
         const fortran_int_t incx, const std::complex<float> beta,
@@ -237,8 +237,8 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename Trans >
-inline void gbmv( Order, Trans, const fortran_int_t m, const fortran_int_t n,
-        const fortran_int_t kl, const fortran_int_t ku,
+inline void gbmv( const Order order, const Trans trans, const fortran_int_t m,
+        const fortran_int_t n, const fortran_int_t kl, const fortran_int_t ku,
         const std::complex<double> alpha, const std::complex<double>* a,
         const fortran_int_t lda, const std::complex<double>* x,
         const fortran_int_t incx, const std::complex<double> beta,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gemv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gemv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gemv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -63,9 +63,10 @@
 // * float value-type.
 //
 template< typename Order, typename Trans >
-inline void gemv( Order, Trans, const int m, const int n, const float alpha,
-        const float* a, const int lda, const float* x, const int incx,
-        const float beta, float* y, const int incy ) {
+inline void gemv( const Order order, const Trans trans, const int m,
+        const int n, const float alpha, const float* a, const int lda,
+        const float* x, const int incx, const float beta, float* y,
+        const int incy ) {
     cblas_sgemv( cblas_option< Order >::value, cblas_option< Trans >::value,
             m, n, alpha, a, lda, x, incx, beta, y, incy );
 }
@@ -76,9 +77,10 @@
 // * double value-type.
 //
 template< typename Order, typename Trans >
-inline void gemv( Order, Trans, const int m, const int n, const double alpha,
-        const double* a, const int lda, const double* x, const int incx,
-        const double beta, double* y, const int incy ) {
+inline void gemv( const Order order, const Trans trans, const int m,
+        const int n, const double alpha, const double* a, const int lda,
+        const double* x, const int incx, const double beta, double* y,
+        const int incy ) {
     cblas_dgemv( cblas_option< Order >::value, cblas_option< Trans >::value,
             m, n, alpha, a, lda, x, incx, beta, y, incy );
 }
@@ -89,9 +91,10 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename Trans >
-inline void gemv( Order, Trans, const int m, const int n,
-        const std::complex<float> alpha, const std::complex<float>* a,
-        const int lda, const std::complex<float>* x, const int incx,
+inline void gemv( const Order order, const Trans trans, const int m,
+        const int n, const std::complex<float> alpha,
+        const std::complex<float>* a, const int lda,
+        const std::complex<float>* x, const int incx,
         const std::complex<float> beta, std::complex<float>* y,
         const int incy ) {
     cblas_cgemv( cblas_option< Order >::value, cblas_option< Trans >::value,
@@ -104,9 +107,10 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename Trans >
-inline void gemv( Order, Trans, const int m, const int n,
-        const std::complex<double> alpha, const std::complex<double>* a,
-        const int lda, const std::complex<double>* x, const int incx,
+inline void gemv( const Order order, const Trans trans, const int m,
+        const int n, const std::complex<double> alpha,
+        const std::complex<double>* a, const int lda,
+        const std::complex<double>* x, const int incx,
         const std::complex<double> beta, std::complex<double>* y,
         const int incy ) {
     cblas_zgemv( cblas_option< Order >::value, cblas_option< Trans >::value,
@@ -120,9 +124,10 @@
 // * float value-type.
 //
 template< typename Order, typename Trans >
-inline void gemv( Order, Trans, const int m, const int n, const float alpha,
-        const float* a, const int lda, const float* x, const int incx,
-        const float beta, float* y, const int incy ) {
+inline void gemv( const Order order, const Trans trans, const int m,
+        const int n, const float alpha, const float* a, const int lda,
+        const float* x, const int incx, const float beta, float* y,
+        const int incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasSgemv( blas_option< Trans >::value, m, n, alpha, a, lda, x, incx,
             beta, y, incy );
@@ -134,9 +139,10 @@
 // * double value-type.
 //
 template< typename Order, typename Trans >
-inline void gemv( Order, Trans, const int m, const int n, const double alpha,
-        const double* a, const int lda, const double* x, const int incx,
-        const double beta, double* y, const int incy ) {
+inline void gemv( const Order order, const Trans trans, const int m,
+        const int n, const double alpha, const double* a, const int lda,
+        const double* x, const int incx, const double beta, double* y,
+        const int incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasDgemv( blas_option< Trans >::value, m, n, alpha, a, lda, x, incx,
             beta, y, incy );
@@ -148,9 +154,10 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename Trans >
-inline void gemv( Order, Trans, const int m, const int n,
-        const std::complex<float> alpha, const std::complex<float>* a,
-        const int lda, const std::complex<float>* x, const int incx,
+inline void gemv( const Order order, const Trans trans, const int m,
+        const int n, const std::complex<float> alpha,
+        const std::complex<float>* a, const int lda,
+        const std::complex<float>* x, const int incx,
         const std::complex<float> beta, std::complex<float>* y,
         const int incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
@@ -164,9 +171,10 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename Trans >
-inline void gemv( Order, Trans, const int m, const int n,
-        const std::complex<double> alpha, const std::complex<double>* a,
-        const int lda, const std::complex<double>* x, const int incx,
+inline void gemv( const Order order, const Trans trans, const int m,
+        const int n, const std::complex<double> alpha,
+        const std::complex<double>* a, const int lda,
+        const std::complex<double>* x, const int incx,
         const std::complex<double> beta, std::complex<double>* y,
         const int incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
@@ -181,10 +189,10 @@
 // * float value-type.
 //
 template< typename Order, typename Trans >
-inline void gemv( Order, Trans, const fortran_int_t m, const fortran_int_t n,
-        const float alpha, const float* a, const fortran_int_t lda,
-        const float* x, const fortran_int_t incx, const float beta, float* y,
-        const fortran_int_t incy ) {
+inline void gemv( const Order order, const Trans trans, const fortran_int_t m,
+        const fortran_int_t n, const float alpha, const float* a,
+        const fortran_int_t lda, const float* x, const fortran_int_t incx,
+        const float beta, float* y, const fortran_int_t incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_SGEMV( &blas_option< Trans >::value, &m, &n, &alpha, a, &lda, x,
             &incx, &beta, y, &incy );
@@ -196,10 +204,10 @@
 // * double value-type.
 //
 template< typename Order, typename Trans >
-inline void gemv( Order, Trans, const fortran_int_t m, const fortran_int_t n,
-        const double alpha, const double* a, const fortran_int_t lda,
-        const double* x, const fortran_int_t incx, const double beta,
-        double* y, const fortran_int_t incy ) {
+inline void gemv( const Order order, const Trans trans, const fortran_int_t m,
+        const fortran_int_t n, const double alpha, const double* a,
+        const fortran_int_t lda, const double* x, const fortran_int_t incx,
+        const double beta, double* y, const fortran_int_t incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_DGEMV( &blas_option< Trans >::value, &m, &n, &alpha, a, &lda, x,
             &incx, &beta, y, &incy );
@@ -211,11 +219,12 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename Trans >
-inline void gemv( Order, Trans, const fortran_int_t m, const fortran_int_t n,
-        const std::complex<float> alpha, const std::complex<float>* a,
-        const fortran_int_t lda, const std::complex<float>* x,
-        const fortran_int_t incx, const std::complex<float> beta,
-        std::complex<float>* y, const fortran_int_t incy ) {
+inline void gemv( const Order order, const Trans trans, const fortran_int_t m,
+        const fortran_int_t n, const std::complex<float> alpha,
+        const std::complex<float>* a, const fortran_int_t lda,
+        const std::complex<float>* x, const fortran_int_t incx,
+        const std::complex<float> beta, std::complex<float>* y,
+        const fortran_int_t incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_CGEMV( &blas_option< Trans >::value, &m, &n, &alpha, a, &lda, x,
             &incx, &beta, y, &incy );
@@ -227,11 +236,12 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename Trans >
-inline void gemv( Order, Trans, const fortran_int_t m, const fortran_int_t n,
-        const std::complex<double> alpha, const std::complex<double>* a,
-        const fortran_int_t lda, const std::complex<double>* x,
-        const fortran_int_t incx, const std::complex<double> beta,
-        std::complex<double>* y, const fortran_int_t incy ) {
+inline void gemv( const Order order, const Trans trans, const fortran_int_t m,
+        const fortran_int_t n, const std::complex<double> alpha,
+        const std::complex<double>* a, const fortran_int_t lda,
+        const std::complex<double>* x, const fortran_int_t incx,
+        const std::complex<double> beta, std::complex<double>* y,
+        const fortran_int_t incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_ZGEMV( &blas_option< Trans >::value, &m, &n, &alpha, a, &lda, x,
             &incx, &beta, y, &incy );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/ger.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/ger.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/ger.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -62,9 +62,9 @@
 // * float value-type.
 //
 template< typename Order >
-inline void ger( Order, const int m, const int n, const float alpha,
-        const float* x, const int incx, const float* y, const int incy,
-        float* a, const int lda ) {
+inline void ger( const Order order, const int m, const int n,
+        const float alpha, const float* x, const int incx, const float* y,
+        const int incy, float* a, const int lda ) {
     cblas_sger( cblas_option< Order >::value, m, n, alpha, x, incx, y, incy,
             a, lda );
 }
@@ -75,9 +75,9 @@
 // * double value-type.
 //
 template< typename Order >
-inline void ger( Order, const int m, const int n, const double alpha,
-        const double* x, const int incx, const double* y, const int incy,
-        double* a, const int lda ) {
+inline void ger( const Order order, const int m, const int n,
+        const double alpha, const double* x, const int incx, const double* y,
+        const int incy, double* a, const int lda ) {
     cblas_dger( cblas_option< Order >::value, m, n, alpha, x, incx, y, incy,
             a, lda );
 }
@@ -89,9 +89,9 @@
 // * float value-type.
 //
 template< typename Order >
-inline void ger( Order, const int m, const int n, const float alpha,
-        const float* x, const int incx, const float* y, const int incy,
-        float* a, const int lda ) {
+inline void ger( const Order order, const int m, const int n,
+        const float alpha, const float* x, const int incx, const float* y,
+        const int incy, float* a, const int lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasSger( m, n, alpha, x, incx, y, incy, a, lda );
 }
@@ -102,9 +102,9 @@
 // * double value-type.
 //
 template< typename Order >
-inline void ger( Order, const int m, const int n, const double alpha,
-        const double* x, const int incx, const double* y, const int incy,
-        double* a, const int lda ) {
+inline void ger( const Order order, const int m, const int n,
+        const double alpha, const double* x, const int incx, const double* y,
+        const int incy, double* a, const int lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasDger( m, n, alpha, x, incx, y, incy, a, lda );
 }
@@ -116,10 +116,10 @@
 // * float value-type.
 //
 template< typename Order >
-inline void ger( Order, const fortran_int_t m, const fortran_int_t n,
-        const float alpha, const float* x, const fortran_int_t incx,
-        const float* y, const fortran_int_t incy, float* a,
-        const fortran_int_t lda ) {
+inline void ger( const Order order, const fortran_int_t m,
+        const fortran_int_t n, const float alpha, const float* x,
+        const fortran_int_t incx, const float* y, const fortran_int_t incy,
+        float* a, const fortran_int_t lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_SGER( &m, &n, &alpha, x, &incx, y, &incy, a, &lda );
 }
@@ -130,10 +130,10 @@
 // * double value-type.
 //
 template< typename Order >
-inline void ger( Order, const fortran_int_t m, const fortran_int_t n,
-        const double alpha, const double* x, const fortran_int_t incx,
-        const double* y, const fortran_int_t incy, double* a,
-        const fortran_int_t lda ) {
+inline void ger( const Order order, const fortran_int_t m,
+        const fortran_int_t n, const double alpha, const double* x,
+        const fortran_int_t incx, const double* y, const fortran_int_t incy,
+        double* a, const fortran_int_t lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_DGER( &m, &n, &alpha, x, &incx, y, &incy, a, &lda );
 }
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gerc.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gerc.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/gerc.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -62,7 +62,7 @@
 // * complex<float> value-type.
 //
 template< typename Order >
-inline void gerc( Order, const int m, const int n,
+inline void gerc( const Order order, const int m, const int n,
         const std::complex<float> alpha, const std::complex<float>* x,
         const int incx, const std::complex<float>* y, const int incy,
         std::complex<float>* a, const int lda ) {
@@ -76,7 +76,7 @@
 // * complex<double> value-type.
 //
 template< typename Order >
-inline void gerc( Order, const int m, const int n,
+inline void gerc( const Order order, const int m, const int n,
         const std::complex<double> alpha, const std::complex<double>* x,
         const int incx, const std::complex<double>* y, const int incy,
         std::complex<double>* a, const int lda ) {
@@ -91,7 +91,7 @@
 // * complex<float> value-type.
 //
 template< typename Order >
-inline void gerc( Order, const int m, const int n,
+inline void gerc( const Order order, const int m, const int n,
         const std::complex<float> alpha, const std::complex<float>* x,
         const int incx, const std::complex<float>* y, const int incy,
         std::complex<float>* a, const int lda ) {
@@ -105,7 +105,7 @@
 // * complex<double> value-type.
 //
 template< typename Order >
-inline void gerc( Order, const int m, const int n,
+inline void gerc( const Order order, const int m, const int n,
         const std::complex<double> alpha, const std::complex<double>* x,
         const int incx, const std::complex<double>* y, const int incy,
         std::complex<double>* a, const int lda ) {
@@ -120,11 +120,11 @@
 // * complex<float> value-type.
 //
 template< typename Order >
-inline void gerc( Order, const fortran_int_t m, const fortran_int_t n,
-        const std::complex<float> alpha, const std::complex<float>* x,
-        const fortran_int_t incx, const std::complex<float>* y,
-        const fortran_int_t incy, std::complex<float>* a,
-        const fortran_int_t lda ) {
+inline void gerc( const Order order, const fortran_int_t m,
+        const fortran_int_t n, const std::complex<float> alpha,
+        const std::complex<float>* x, const fortran_int_t incx,
+        const std::complex<float>* y, const fortran_int_t incy,
+        std::complex<float>* a, const fortran_int_t lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_CGERC( &m, &n, &alpha, x, &incx, y, &incy, a, &lda );
 }
@@ -135,11 +135,11 @@
 // * complex<double> value-type.
 //
 template< typename Order >
-inline void gerc( Order, const fortran_int_t m, const fortran_int_t n,
-        const std::complex<double> alpha, const std::complex<double>* x,
-        const fortran_int_t incx, const std::complex<double>* y,
-        const fortran_int_t incy, std::complex<double>* a,
-        const fortran_int_t lda ) {
+inline void gerc( const Order order, const fortran_int_t m,
+        const fortran_int_t n, const std::complex<double> alpha,
+        const std::complex<double>* x, const fortran_int_t incx,
+        const std::complex<double>* y, const fortran_int_t incy,
+        std::complex<double>* a, const fortran_int_t lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_ZGERC( &m, &n, &alpha, x, &incx, y, &incy, a, &lda );
 }
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/geru.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/geru.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/geru.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -62,7 +62,7 @@
 // * complex<float> value-type.
 //
 template< typename Order >
-inline void geru( Order, const int m, const int n,
+inline void geru( const Order order, const int m, const int n,
         const std::complex<float> alpha, const std::complex<float>* x,
         const int incx, const std::complex<float>* y, const int incy,
         std::complex<float>* a, const int lda ) {
@@ -76,7 +76,7 @@
 // * complex<double> value-type.
 //
 template< typename Order >
-inline void geru( Order, const int m, const int n,
+inline void geru( const Order order, const int m, const int n,
         const std::complex<double> alpha, const std::complex<double>* x,
         const int incx, const std::complex<double>* y, const int incy,
         std::complex<double>* a, const int lda ) {
@@ -91,7 +91,7 @@
 // * complex<float> value-type.
 //
 template< typename Order >
-inline void geru( Order, const int m, const int n,
+inline void geru( const Order order, const int m, const int n,
         const std::complex<float> alpha, const std::complex<float>* x,
         const int incx, const std::complex<float>* y, const int incy,
         std::complex<float>* a, const int lda ) {
@@ -105,7 +105,7 @@
 // * complex<double> value-type.
 //
 template< typename Order >
-inline void geru( Order, const int m, const int n,
+inline void geru( const Order order, const int m, const int n,
         const std::complex<double> alpha, const std::complex<double>* x,
         const int incx, const std::complex<double>* y, const int incy,
         std::complex<double>* a, const int lda ) {
@@ -120,11 +120,11 @@
 // * complex<float> value-type.
 //
 template< typename Order >
-inline void geru( Order, const fortran_int_t m, const fortran_int_t n,
-        const std::complex<float> alpha, const std::complex<float>* x,
-        const fortran_int_t incx, const std::complex<float>* y,
-        const fortran_int_t incy, std::complex<float>* a,
-        const fortran_int_t lda ) {
+inline void geru( const Order order, const fortran_int_t m,
+        const fortran_int_t n, const std::complex<float> alpha,
+        const std::complex<float>* x, const fortran_int_t incx,
+        const std::complex<float>* y, const fortran_int_t incy,
+        std::complex<float>* a, const fortran_int_t lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_CGERU( &m, &n, &alpha, x, &incx, y, &incy, a, &lda );
 }
@@ -135,11 +135,11 @@
 // * complex<double> value-type.
 //
 template< typename Order >
-inline void geru( Order, const fortran_int_t m, const fortran_int_t n,
-        const std::complex<double> alpha, const std::complex<double>* x,
-        const fortran_int_t incx, const std::complex<double>* y,
-        const fortran_int_t incy, std::complex<double>* a,
-        const fortran_int_t lda ) {
+inline void geru( const Order order, const fortran_int_t m,
+        const fortran_int_t n, const std::complex<double> alpha,
+        const std::complex<double>* x, const fortran_int_t incx,
+        const std::complex<double>* y, const fortran_int_t incy,
+        std::complex<double>* a, const fortran_int_t lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_ZGERU( &m, &n, &alpha, x, &incx, y, &incy, a, &lda );
 }
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hbmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hbmv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hbmv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -64,9 +64,10 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hbmv( Order, UpLo, const int n, const int k,
-        const std::complex<float> alpha, const std::complex<float>* a,
-        const int lda, const std::complex<float>* x, const int incx,
+inline void hbmv( const Order order, const UpLo uplo, const int n,
+        const int k, const std::complex<float> alpha,
+        const std::complex<float>* a, const int lda,
+        const std::complex<float>* x, const int incx,
         const std::complex<float> beta, std::complex<float>* y,
         const int incy ) {
     cblas_chbmv( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
@@ -79,9 +80,10 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hbmv( Order, UpLo, const int n, const int k,
-        const std::complex<double> alpha, const std::complex<double>* a,
-        const int lda, const std::complex<double>* x, const int incx,
+inline void hbmv( const Order order, const UpLo uplo, const int n,
+        const int k, const std::complex<double> alpha,
+        const std::complex<double>* a, const int lda,
+        const std::complex<double>* x, const int incx,
         const std::complex<double> beta, std::complex<double>* y,
         const int incy ) {
     cblas_zhbmv( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
@@ -95,9 +97,10 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hbmv( Order, UpLo, const int n, const int k,
-        const std::complex<float> alpha, const std::complex<float>* a,
-        const int lda, const std::complex<float>* x, const int incx,
+inline void hbmv( const Order order, const UpLo uplo, const int n,
+        const int k, const std::complex<float> alpha,
+        const std::complex<float>* a, const int lda,
+        const std::complex<float>* x, const int incx,
         const std::complex<float> beta, std::complex<float>* y,
         const int incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
@@ -111,9 +114,10 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hbmv( Order, UpLo, const int n, const int k,
-        const std::complex<double> alpha, const std::complex<double>* a,
-        const int lda, const std::complex<double>* x, const int incx,
+inline void hbmv( const Order order, const UpLo uplo, const int n,
+        const int k, const std::complex<double> alpha,
+        const std::complex<double>* a, const int lda,
+        const std::complex<double>* x, const int incx,
         const std::complex<double> beta, std::complex<double>* y,
         const int incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
@@ -127,11 +131,12 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hbmv( Order, UpLo, const fortran_int_t n, const fortran_int_t k,
-        const std::complex<float> alpha, const std::complex<float>* a,
-        const fortran_int_t lda, const std::complex<float>* x,
-        const fortran_int_t incx, const std::complex<float> beta,
-        std::complex<float>* y, const fortran_int_t incy ) {
+inline void hbmv( const Order order, const UpLo uplo, const fortran_int_t n,
+        const fortran_int_t k, const std::complex<float> alpha,
+        const std::complex<float>* a, const fortran_int_t lda,
+        const std::complex<float>* x, const fortran_int_t incx,
+        const std::complex<float> beta, std::complex<float>* y,
+        const fortran_int_t incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_CHBMV( &blas_option< UpLo >::value, &n, &k, &alpha, a, &lda, x,
             &incx, &beta, y, &incy );
@@ -143,11 +148,12 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hbmv( Order, UpLo, const fortran_int_t n, const fortran_int_t k,
-        const std::complex<double> alpha, const std::complex<double>* a,
-        const fortran_int_t lda, const std::complex<double>* x,
-        const fortran_int_t incx, const std::complex<double> beta,
-        std::complex<double>* y, const fortran_int_t incy ) {
+inline void hbmv( const Order order, const UpLo uplo, const fortran_int_t n,
+        const fortran_int_t k, const std::complex<double> alpha,
+        const std::complex<double>* a, const fortran_int_t lda,
+        const std::complex<double>* x, const fortran_int_t incx,
+        const std::complex<double> beta, std::complex<double>* y,
+        const fortran_int_t incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_ZHBMV( &blas_option< UpLo >::value, &n, &k, &alpha, a, &lda, x,
             &incx, &beta, y, &incy );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hemv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hemv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hemv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -63,9 +63,9 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hemv( Order, UpLo, const int n, const std::complex<float> alpha,
-        const std::complex<float>* a, const int lda,
-        const std::complex<float>* x, const int incx,
+inline void hemv( const Order order, const UpLo uplo, const int n,
+        const std::complex<float> alpha, const std::complex<float>* a,
+        const int lda, const std::complex<float>* x, const int incx,
         const std::complex<float> beta, std::complex<float>* y,
         const int incy ) {
     cblas_chemv( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
@@ -78,9 +78,9 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hemv( Order, UpLo, const int n, const std::complex<double> alpha,
-        const std::complex<double>* a, const int lda,
-        const std::complex<double>* x, const int incx,
+inline void hemv( const Order order, const UpLo uplo, const int n,
+        const std::complex<double> alpha, const std::complex<double>* a,
+        const int lda, const std::complex<double>* x, const int incx,
         const std::complex<double> beta, std::complex<double>* y,
         const int incy ) {
     cblas_zhemv( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
@@ -94,9 +94,9 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hemv( Order, UpLo, const int n, const std::complex<float> alpha,
-        const std::complex<float>* a, const int lda,
-        const std::complex<float>* x, const int incx,
+inline void hemv( const Order order, const UpLo uplo, const int n,
+        const std::complex<float> alpha, const std::complex<float>* a,
+        const int lda, const std::complex<float>* x, const int incx,
         const std::complex<float> beta, std::complex<float>* y,
         const int incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
@@ -110,9 +110,9 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hemv( Order, UpLo, const int n, const std::complex<double> alpha,
-        const std::complex<double>* a, const int lda,
-        const std::complex<double>* x, const int incx,
+inline void hemv( const Order order, const UpLo uplo, const int n,
+        const std::complex<double> alpha, const std::complex<double>* a,
+        const int lda, const std::complex<double>* x, const int incx,
         const std::complex<double> beta, std::complex<double>* y,
         const int incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
@@ -126,7 +126,7 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hemv( Order, UpLo, const fortran_int_t n,
+inline void hemv( const Order order, const UpLo uplo, const fortran_int_t n,
         const std::complex<float> alpha, const std::complex<float>* a,
         const fortran_int_t lda, const std::complex<float>* x,
         const fortran_int_t incx, const std::complex<float> beta,
@@ -142,7 +142,7 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hemv( Order, UpLo, const fortran_int_t n,
+inline void hemv( const Order order, const UpLo uplo, const fortran_int_t n,
         const std::complex<double> alpha, const std::complex<double>* a,
         const fortran_int_t lda, const std::complex<double>* x,
         const fortran_int_t incx, const std::complex<double> beta,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -63,9 +63,9 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
-inline void her( Order, UpLo, const int n, const float alpha,
-        const std::complex<float>* x, const int incx, std::complex<float>* a,
-        const int lda ) {
+inline void her( const Order order, const UpLo uplo, const int n,
+        const float alpha, const std::complex<float>* x, const int incx,
+        std::complex<float>* a, const int lda ) {
     cblas_cher( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
             alpha, x, incx, a, lda );
 }
@@ -76,8 +76,8 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo >
-inline void her( Order, UpLo, const int n, const double alpha,
-        const std::complex<double>* x, const int incx,
+inline void her( const Order order, const UpLo uplo, const int n,
+        const double alpha, const std::complex<double>* x, const int incx,
         std::complex<double>* a, const int lda ) {
     cblas_zher( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
             alpha, x, incx, a, lda );
@@ -90,9 +90,9 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
-inline void her( Order, UpLo, const int n, const float alpha,
-        const std::complex<float>* x, const int incx, std::complex<float>* a,
-        const int lda ) {
+inline void her( const Order order, const UpLo uplo, const int n,
+        const float alpha, const std::complex<float>* x, const int incx,
+        std::complex<float>* a, const int lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasCher( blas_option< UpLo >::value, n, alpha, x, incx, a, lda );
 }
@@ -103,8 +103,8 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo >
-inline void her( Order, UpLo, const int n, const double alpha,
-        const std::complex<double>* x, const int incx,
+inline void her( const Order order, const UpLo uplo, const int n,
+        const double alpha, const std::complex<double>* x, const int incx,
         std::complex<double>* a, const int lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     // NOT FOUND();
@@ -117,9 +117,10 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
-inline void her( Order, UpLo, const fortran_int_t n, const float alpha,
-        const std::complex<float>* x, const fortran_int_t incx,
-        std::complex<float>* a, const fortran_int_t lda ) {
+inline void her( const Order order, const UpLo uplo, const fortran_int_t n,
+        const float alpha, const std::complex<float>* x,
+        const fortran_int_t incx, std::complex<float>* a,
+        const fortran_int_t lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_CHER( &blas_option< UpLo >::value, &n, &alpha, x, &incx, a, &lda );
 }
@@ -130,9 +131,10 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo >
-inline void her( Order, UpLo, const fortran_int_t n, const double alpha,
-        const std::complex<double>* x, const fortran_int_t incx,
-        std::complex<double>* a, const fortran_int_t lda ) {
+inline void her( const Order order, const UpLo uplo, const fortran_int_t n,
+        const double alpha, const std::complex<double>* x,
+        const fortran_int_t incx, std::complex<double>* a,
+        const fortran_int_t lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_ZHER( &blas_option< UpLo >::value, &n, &alpha, x, &incx, a, &lda );
 }
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her2.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her2.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/her2.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -63,10 +63,10 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
-inline void her2( Order, UpLo, const int n, const std::complex<float> alpha,
-        const std::complex<float>* x, const int incx,
-        const std::complex<float>* y, const int incy, std::complex<float>* a,
-        const int lda ) {
+inline void her2( const Order order, const UpLo uplo, const int n,
+        const std::complex<float> alpha, const std::complex<float>* x,
+        const int incx, const std::complex<float>* y, const int incy,
+        std::complex<float>* a, const int lda ) {
     cblas_cher2( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
             &alpha, x, incx, y, incy, a, lda );
 }
@@ -77,9 +77,9 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo >
-inline void her2( Order, UpLo, const int n, const std::complex<double> alpha,
-        const std::complex<double>* x, const int incx,
-        const std::complex<double>* y, const int incy,
+inline void her2( const Order order, const UpLo uplo, const int n,
+        const std::complex<double> alpha, const std::complex<double>* x,
+        const int incx, const std::complex<double>* y, const int incy,
         std::complex<double>* a, const int lda ) {
     cblas_zher2( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
             &alpha, x, incx, y, incy, a, lda );
@@ -92,10 +92,10 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
-inline void her2( Order, UpLo, const int n, const std::complex<float> alpha,
-        const std::complex<float>* x, const int incx,
-        const std::complex<float>* y, const int incy, std::complex<float>* a,
-        const int lda ) {
+inline void her2( const Order order, const UpLo uplo, const int n,
+        const std::complex<float> alpha, const std::complex<float>* x,
+        const int incx, const std::complex<float>* y, const int incy,
+        std::complex<float>* a, const int lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasCher2( blas_option< UpLo >::value, n, alpha, x, incx, y, incy, a,
             lda );
@@ -107,9 +107,9 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo >
-inline void her2( Order, UpLo, const int n, const std::complex<double> alpha,
-        const std::complex<double>* x, const int incx,
-        const std::complex<double>* y, const int incy,
+inline void her2( const Order order, const UpLo uplo, const int n,
+        const std::complex<double> alpha, const std::complex<double>* x,
+        const int incx, const std::complex<double>* y, const int incy,
         std::complex<double>* a, const int lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     // NOT FOUND();
@@ -122,7 +122,7 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
-inline void her2( Order, UpLo, const fortran_int_t n,
+inline void her2( const Order order, const UpLo uplo, const fortran_int_t n,
         const std::complex<float> alpha, const std::complex<float>* x,
         const fortran_int_t incx, const std::complex<float>* y,
         const fortran_int_t incy, std::complex<float>* a,
@@ -138,7 +138,7 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo >
-inline void her2( Order, UpLo, const fortran_int_t n,
+inline void her2( const Order order, const UpLo uplo, const fortran_int_t n,
         const std::complex<double> alpha, const std::complex<double>* x,
         const fortran_int_t incx, const std::complex<double>* y,
         const fortran_int_t incy, std::complex<double>* a,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpmv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpmv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -63,10 +63,11 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hpmv( Order, UpLo, const int n, const std::complex<float> alpha,
-        const std::complex<float>* ap, const std::complex<float>* x,
-        const int incx, const std::complex<float> beta,
-        std::complex<float>* y, const int incy ) {
+inline void hpmv( const Order order, const UpLo uplo, const int n,
+        const std::complex<float> alpha, const std::complex<float>* ap,
+        const std::complex<float>* x, const int incx,
+        const std::complex<float> beta, std::complex<float>* y,
+        const int incy ) {
     cblas_chpmv( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
             &alpha, ap, x, incx, &beta, y, incy );
 }
@@ -77,10 +78,11 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hpmv( Order, UpLo, const int n, const std::complex<double> alpha,
-        const std::complex<double>* ap, const std::complex<double>* x,
-        const int incx, const std::complex<double> beta,
-        std::complex<double>* y, const int incy ) {
+inline void hpmv( const Order order, const UpLo uplo, const int n,
+        const std::complex<double> alpha, const std::complex<double>* ap,
+        const std::complex<double>* x, const int incx,
+        const std::complex<double> beta, std::complex<double>* y,
+        const int incy ) {
     cblas_zhpmv( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
             &alpha, ap, x, incx, &beta, y, incy );
 }
@@ -92,10 +94,11 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hpmv( Order, UpLo, const int n, const std::complex<float> alpha,
-        const std::complex<float>* ap, const std::complex<float>* x,
-        const int incx, const std::complex<float> beta,
-        std::complex<float>* y, const int incy ) {
+inline void hpmv( const Order order, const UpLo uplo, const int n,
+        const std::complex<float> alpha, const std::complex<float>* ap,
+        const std::complex<float>* x, const int incx,
+        const std::complex<float> beta, std::complex<float>* y,
+        const int incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasChpmv( blas_option< UpLo >::value, n, alpha, ap, x, incx, beta, y,
             incy );
@@ -107,10 +110,11 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hpmv( Order, UpLo, const int n, const std::complex<double> alpha,
-        const std::complex<double>* ap, const std::complex<double>* x,
-        const int incx, const std::complex<double> beta,
-        std::complex<double>* y, const int incy ) {
+inline void hpmv( const Order order, const UpLo uplo, const int n,
+        const std::complex<double> alpha, const std::complex<double>* ap,
+        const std::complex<double>* x, const int incx,
+        const std::complex<double> beta, std::complex<double>* y,
+        const int incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     // NOT FOUND();
 }
@@ -122,7 +126,7 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hpmv( Order, UpLo, const fortran_int_t n,
+inline void hpmv( const Order order, const UpLo uplo, const fortran_int_t n,
         const std::complex<float> alpha, const std::complex<float>* ap,
         const std::complex<float>* x, const fortran_int_t incx,
         const std::complex<float> beta, std::complex<float>* y,
@@ -138,7 +142,7 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hpmv( Order, UpLo, const fortran_int_t n,
+inline void hpmv( const Order order, const UpLo uplo, const fortran_int_t n,
         const std::complex<double> alpha, const std::complex<double>* ap,
         const std::complex<double>* x, const fortran_int_t incx,
         const std::complex<double> beta, std::complex<double>* y,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -63,8 +63,8 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hpr( Order, UpLo, const int n, const float alpha,
-        const std::complex<float>* x, const int incx,
+inline void hpr( const Order order, const UpLo uplo, const int n,
+        const float alpha, const std::complex<float>* x, const int incx,
         std::complex<float>* ap ) {
     cblas_chpr( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
             alpha, x, incx, ap );
@@ -76,8 +76,8 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hpr( Order, UpLo, const int n, const double alpha,
-        const std::complex<double>* x, const int incx,
+inline void hpr( const Order order, const UpLo uplo, const int n,
+        const double alpha, const std::complex<double>* x, const int incx,
         std::complex<double>* ap ) {
     cblas_zhpr( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
             alpha, x, incx, ap );
@@ -90,8 +90,8 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hpr( Order, UpLo, const int n, const float alpha,
-        const std::complex<float>* x, const int incx,
+inline void hpr( const Order order, const UpLo uplo, const int n,
+        const float alpha, const std::complex<float>* x, const int incx,
         std::complex<float>* ap ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasChpr( blas_option< UpLo >::value, n, alpha, x, incx, ap );
@@ -103,8 +103,8 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hpr( Order, UpLo, const int n, const double alpha,
-        const std::complex<double>* x, const int incx,
+inline void hpr( const Order order, const UpLo uplo, const int n,
+        const double alpha, const std::complex<double>* x, const int incx,
         std::complex<double>* ap ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     // NOT FOUND();
@@ -117,9 +117,9 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hpr( Order, UpLo, const fortran_int_t n, const float alpha,
-        const std::complex<float>* x, const fortran_int_t incx,
-        std::complex<float>* ap ) {
+inline void hpr( const Order order, const UpLo uplo, const fortran_int_t n,
+        const float alpha, const std::complex<float>* x,
+        const fortran_int_t incx, std::complex<float>* ap ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_CHPR( &blas_option< UpLo >::value, &n, &alpha, x, &incx, ap );
 }
@@ -130,9 +130,9 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hpr( Order, UpLo, const fortran_int_t n, const double alpha,
-        const std::complex<double>* x, const fortran_int_t incx,
-        std::complex<double>* ap ) {
+inline void hpr( const Order order, const UpLo uplo, const fortran_int_t n,
+        const double alpha, const std::complex<double>* x,
+        const fortran_int_t incx, std::complex<double>* ap ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_ZHPR( &blas_option< UpLo >::value, &n, &alpha, x, &incx, ap );
 }
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr2.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr2.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/hpr2.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -63,9 +63,9 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hpr2( Order, UpLo, const int n, const std::complex<float> alpha,
-        const std::complex<float>* x, const int incx,
-        const std::complex<float>* y, const int incy,
+inline void hpr2( const Order order, const UpLo uplo, const int n,
+        const std::complex<float> alpha, const std::complex<float>* x,
+        const int incx, const std::complex<float>* y, const int incy,
         std::complex<float>* ap ) {
     cblas_chpr2( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
             &alpha, x, incx, y, incy, ap );
@@ -77,9 +77,9 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hpr2( Order, UpLo, const int n, const std::complex<double> alpha,
-        const std::complex<double>* x, const int incx,
-        const std::complex<double>* y, const int incy,
+inline void hpr2( const Order order, const UpLo uplo, const int n,
+        const std::complex<double> alpha, const std::complex<double>* x,
+        const int incx, const std::complex<double>* y, const int incy,
         std::complex<double>* ap ) {
     cblas_zhpr2( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
             &alpha, x, incx, y, incy, ap );
@@ -92,9 +92,9 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hpr2( Order, UpLo, const int n, const std::complex<float> alpha,
-        const std::complex<float>* x, const int incx,
-        const std::complex<float>* y, const int incy,
+inline void hpr2( const Order order, const UpLo uplo, const int n,
+        const std::complex<float> alpha, const std::complex<float>* x,
+        const int incx, const std::complex<float>* y, const int incy,
         std::complex<float>* ap ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasChpr2( blas_option< UpLo >::value, n, alpha, x, incx, y, incy, ap );
@@ -106,9 +106,9 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hpr2( Order, UpLo, const int n, const std::complex<double> alpha,
-        const std::complex<double>* x, const int incx,
-        const std::complex<double>* y, const int incy,
+inline void hpr2( const Order order, const UpLo uplo, const int n,
+        const std::complex<double> alpha, const std::complex<double>* x,
+        const int incx, const std::complex<double>* y, const int incy,
         std::complex<double>* ap ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     // NOT FOUND();
@@ -121,7 +121,7 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hpr2( Order, UpLo, const fortran_int_t n,
+inline void hpr2( const Order order, const UpLo uplo, const fortran_int_t n,
         const std::complex<float> alpha, const std::complex<float>* x,
         const fortran_int_t incx, const std::complex<float>* y,
         const fortran_int_t incy, std::complex<float>* ap ) {
@@ -136,7 +136,7 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo >
-inline void hpr2( Order, UpLo, const fortran_int_t n,
+inline void hpr2( const Order order, const UpLo uplo, const fortran_int_t n,
         const std::complex<double> alpha, const std::complex<double>* x,
         const fortran_int_t incx, const std::complex<double>* y,
         const fortran_int_t incy, std::complex<double>* ap ) {
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/sbmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/sbmv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/sbmv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -64,9 +64,10 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo >
-inline void sbmv( Order, UpLo, const int n, const int k, const float alpha,
-        const float* a, const int lda, const float* x, const int incx,
-        const float beta, float* y, const int incy ) {
+inline void sbmv( const Order order, const UpLo uplo, const int n,
+        const int k, const float alpha, const float* a, const int lda,
+        const float* x, const int incx, const float beta, float* y,
+        const int incy ) {
     cblas_ssbmv( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
             k, alpha, a, lda, x, incx, beta, y, incy );
 }
@@ -77,9 +78,10 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo >
-inline void sbmv( Order, UpLo, const int n, const int k, const double alpha,
-        const double* a, const int lda, const double* x, const int incx,
-        const double beta, double* y, const int incy ) {
+inline void sbmv( const Order order, const UpLo uplo, const int n,
+        const int k, const double alpha, const double* a, const int lda,
+        const double* x, const int incx, const double beta, double* y,
+        const int incy ) {
     cblas_dsbmv( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
             k, alpha, a, lda, x, incx, beta, y, incy );
 }
@@ -91,9 +93,10 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo >
-inline void sbmv( Order, UpLo, const int n, const int k, const float alpha,
-        const float* a, const int lda, const float* x, const int incx,
-        const float beta, float* y, const int incy ) {
+inline void sbmv( const Order order, const UpLo uplo, const int n,
+        const int k, const float alpha, const float* a, const int lda,
+        const float* x, const int incx, const float beta, float* y,
+        const int incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasSsbmv( blas_option< UpLo >::value, n, k, alpha, a, lda, x, incx,
             beta, y, incy );
@@ -105,9 +108,10 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo >
-inline void sbmv( Order, UpLo, const int n, const int k, const double alpha,
-        const double* a, const int lda, const double* x, const int incx,
-        const double beta, double* y, const int incy ) {
+inline void sbmv( const Order order, const UpLo uplo, const int n,
+        const int k, const double alpha, const double* a, const int lda,
+        const double* x, const int incx, const double beta, double* y,
+        const int incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     // NOT FOUND();
 }
@@ -119,10 +123,10 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo >
-inline void sbmv( Order, UpLo, const fortran_int_t n, const fortran_int_t k,
-        const float alpha, const float* a, const fortran_int_t lda,
-        const float* x, const fortran_int_t incx, const float beta, float* y,
-        const fortran_int_t incy ) {
+inline void sbmv( const Order order, const UpLo uplo, const fortran_int_t n,
+        const fortran_int_t k, const float alpha, const float* a,
+        const fortran_int_t lda, const float* x, const fortran_int_t incx,
+        const float beta, float* y, const fortran_int_t incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_SSBMV( &blas_option< UpLo >::value, &n, &k, &alpha, a, &lda, x,
             &incx, &beta, y, &incy );
@@ -134,10 +138,10 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo >
-inline void sbmv( Order, UpLo, const fortran_int_t n, const fortran_int_t k,
-        const double alpha, const double* a, const fortran_int_t lda,
-        const double* x, const fortran_int_t incx, const double beta,
-        double* y, const fortran_int_t incy ) {
+inline void sbmv( const Order order, const UpLo uplo, const fortran_int_t n,
+        const fortran_int_t k, const double alpha, const double* a,
+        const fortran_int_t lda, const double* x, const fortran_int_t incx,
+        const double beta, double* y, const fortran_int_t incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_DSBMV( &blas_option< UpLo >::value, &n, &k, &alpha, a, &lda, x,
             &incx, &beta, y, &incy );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spmv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spmv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -63,9 +63,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo >
-inline void spmv( Order, UpLo, const int n, const float alpha,
-        const float* ap, const float* x, const int incx, const float beta,
-        float* y, const int incy ) {
+inline void spmv( const Order order, const UpLo uplo, const int n,
+        const float alpha, const float* ap, const float* x, const int incx,
+        const float beta, float* y, const int incy ) {
     cblas_sspmv( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
             alpha, ap, x, incx, beta, y, incy );
 }
@@ -76,9 +76,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo >
-inline void spmv( Order, UpLo, const int n, const double alpha,
-        const double* ap, const double* x, const int incx, const double beta,
-        double* y, const int incy ) {
+inline void spmv( const Order order, const UpLo uplo, const int n,
+        const double alpha, const double* ap, const double* x, const int incx,
+        const double beta, double* y, const int incy ) {
     cblas_dspmv( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
             alpha, ap, x, incx, beta, y, incy );
 }
@@ -90,9 +90,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo >
-inline void spmv( Order, UpLo, const int n, const float alpha,
-        const float* ap, const float* x, const int incx, const float beta,
-        float* y, const int incy ) {
+inline void spmv( const Order order, const UpLo uplo, const int n,
+        const float alpha, const float* ap, const float* x, const int incx,
+        const float beta, float* y, const int incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasSspmv( blas_option< UpLo >::value, n, alpha, ap, x, incx, beta, y,
             incy );
@@ -104,9 +104,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo >
-inline void spmv( Order, UpLo, const int n, const double alpha,
-        const double* ap, const double* x, const int incx, const double beta,
-        double* y, const int incy ) {
+inline void spmv( const Order order, const UpLo uplo, const int n,
+        const double alpha, const double* ap, const double* x, const int incx,
+        const double beta, double* y, const int incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     // NOT FOUND();
 }
@@ -118,9 +118,10 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo >
-inline void spmv( Order, UpLo, const fortran_int_t n, const float alpha,
-        const float* ap, const float* x, const fortran_int_t incx,
-        const float beta, float* y, const fortran_int_t incy ) {
+inline void spmv( const Order order, const UpLo uplo, const fortran_int_t n,
+        const float alpha, const float* ap, const float* x,
+        const fortran_int_t incx, const float beta, float* y,
+        const fortran_int_t incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_SSPMV( &blas_option< UpLo >::value, &n, &alpha, ap, x, &incx, &beta,
             y, &incy );
@@ -132,9 +133,10 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo >
-inline void spmv( Order, UpLo, const fortran_int_t n, const double alpha,
-        const double* ap, const double* x, const fortran_int_t incx,
-        const double beta, double* y, const fortran_int_t incy ) {
+inline void spmv( const Order order, const UpLo uplo, const fortran_int_t n,
+        const double alpha, const double* ap, const double* x,
+        const fortran_int_t incx, const double beta, double* y,
+        const fortran_int_t incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_DSPMV( &blas_option< UpLo >::value, &n, &alpha, ap, x, &incx, &beta,
             y, &incy );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -63,8 +63,8 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo >
-inline void spr( Order, UpLo, const int n, const float alpha, const float* x,
-        const int incx, float* ap ) {
+inline void spr( const Order order, const UpLo uplo, const int n,
+        const float alpha, const float* x, const int incx, float* ap ) {
     cblas_sspr( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
             alpha, x, incx, ap );
 }
@@ -75,8 +75,8 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo >
-inline void spr( Order, UpLo, const int n, const double alpha,
-        const double* x, const int incx, double* ap ) {
+inline void spr( const Order order, const UpLo uplo, const int n,
+        const double alpha, const double* x, const int incx, double* ap ) {
     cblas_dspr( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
             alpha, x, incx, ap );
 }
@@ -88,8 +88,8 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo >
-inline void spr( Order, UpLo, const int n, const float alpha, const float* x,
-        const int incx, float* ap ) {
+inline void spr( const Order order, const UpLo uplo, const int n,
+        const float alpha, const float* x, const int incx, float* ap ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasSspr( blas_option< UpLo >::value, n, alpha, x, incx, ap );
 }
@@ -100,8 +100,8 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo >
-inline void spr( Order, UpLo, const int n, const double alpha,
-        const double* x, const int incx, double* ap ) {
+inline void spr( const Order order, const UpLo uplo, const int n,
+        const double alpha, const double* x, const int incx, double* ap ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     // NOT FOUND();
 }
@@ -113,8 +113,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo >
-inline void spr( Order, UpLo, const fortran_int_t n, const float alpha,
-        const float* x, const fortran_int_t incx, float* ap ) {
+inline void spr( const Order order, const UpLo uplo, const fortran_int_t n,
+        const float alpha, const float* x, const fortran_int_t incx,
+        float* ap ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_SSPR( &blas_option< UpLo >::value, &n, &alpha, x, &incx, ap );
 }
@@ -125,8 +126,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo >
-inline void spr( Order, UpLo, const fortran_int_t n, const double alpha,
-        const double* x, const fortran_int_t incx, double* ap ) {
+inline void spr( const Order order, const UpLo uplo, const fortran_int_t n,
+        const double alpha, const double* x, const fortran_int_t incx,
+        double* ap ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_DSPR( &blas_option< UpLo >::value, &n, &alpha, x, &incx, ap );
 }
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr2.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr2.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/spr2.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -63,8 +63,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo >
-inline void spr2( Order, UpLo, const int n, const float alpha, const float* x,
-        const int incx, const float* y, const int incy, float* ap ) {
+inline void spr2( const Order order, const UpLo uplo, const int n,
+        const float alpha, const float* x, const int incx, const float* y,
+        const int incy, float* ap ) {
     cblas_sspr2( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
             alpha, x, incx, y, incy, ap );
 }
@@ -75,9 +76,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo >
-inline void spr2( Order, UpLo, const int n, const double alpha,
-        const double* x, const int incx, const double* y, const int incy,
-        double* ap ) {
+inline void spr2( const Order order, const UpLo uplo, const int n,
+        const double alpha, const double* x, const int incx, const double* y,
+        const int incy, double* ap ) {
     cblas_dspr2( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
             alpha, x, incx, y, incy, ap );
 }
@@ -89,8 +90,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo >
-inline void spr2( Order, UpLo, const int n, const float alpha, const float* x,
-        const int incx, const float* y, const int incy, float* ap ) {
+inline void spr2( const Order order, const UpLo uplo, const int n,
+        const float alpha, const float* x, const int incx, const float* y,
+        const int incy, float* ap ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasSspr2( blas_option< UpLo >::value, n, alpha, x, incx, y, incy, ap );
 }
@@ -101,9 +103,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo >
-inline void spr2( Order, UpLo, const int n, const double alpha,
-        const double* x, const int incx, const double* y, const int incy,
-        double* ap ) {
+inline void spr2( const Order order, const UpLo uplo, const int n,
+        const double alpha, const double* x, const int incx, const double* y,
+        const int incy, double* ap ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     // NOT FOUND();
 }
@@ -115,9 +117,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo >
-inline void spr2( Order, UpLo, const fortran_int_t n, const float alpha,
-        const float* x, const fortran_int_t incx, const float* y,
-        const fortran_int_t incy, float* ap ) {
+inline void spr2( const Order order, const UpLo uplo, const fortran_int_t n,
+        const float alpha, const float* x, const fortran_int_t incx,
+        const float* y, const fortran_int_t incy, float* ap ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_SSPR2( &blas_option< UpLo >::value, &n, &alpha, x, &incx, y, &incy,
             ap );
@@ -129,9 +131,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo >
-inline void spr2( Order, UpLo, const fortran_int_t n, const double alpha,
-        const double* x, const fortran_int_t incx, const double* y,
-        const fortran_int_t incy, double* ap ) {
+inline void spr2( const Order order, const UpLo uplo, const fortran_int_t n,
+        const double alpha, const double* x, const fortran_int_t incx,
+        const double* y, const fortran_int_t incy, double* ap ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_DSPR2( &blas_option< UpLo >::value, &n, &alpha, x, &incx, y, &incy,
             ap );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/symv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/symv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/symv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -63,9 +63,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo >
-inline void symv( Order, UpLo, const int n, const float alpha, const float* a,
-        const int lda, const float* x, const int incx, const float beta,
-        float* y, const int incy ) {
+inline void symv( const Order order, const UpLo uplo, const int n,
+        const float alpha, const float* a, const int lda, const float* x,
+        const int incx, const float beta, float* y, const int incy ) {
     cblas_ssymv( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
             alpha, a, lda, x, incx, beta, y, incy );
 }
@@ -76,9 +76,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo >
-inline void symv( Order, UpLo, const int n, const double alpha,
-        const double* a, const int lda, const double* x, const int incx,
-        const double beta, double* y, const int incy ) {
+inline void symv( const Order order, const UpLo uplo, const int n,
+        const double alpha, const double* a, const int lda, const double* x,
+        const int incx, const double beta, double* y, const int incy ) {
     cblas_dsymv( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
             alpha, a, lda, x, incx, beta, y, incy );
 }
@@ -90,9 +90,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo >
-inline void symv( Order, UpLo, const int n, const float alpha, const float* a,
-        const int lda, const float* x, const int incx, const float beta,
-        float* y, const int incy ) {
+inline void symv( const Order order, const UpLo uplo, const int n,
+        const float alpha, const float* a, const int lda, const float* x,
+        const int incx, const float beta, float* y, const int incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasSsymv( blas_option< UpLo >::value, n, alpha, a, lda, x, incx, beta,
             y, incy );
@@ -104,9 +104,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo >
-inline void symv( Order, UpLo, const int n, const double alpha,
-        const double* a, const int lda, const double* x, const int incx,
-        const double beta, double* y, const int incy ) {
+inline void symv( const Order order, const UpLo uplo, const int n,
+        const double alpha, const double* a, const int lda, const double* x,
+        const int incx, const double beta, double* y, const int incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     // NOT FOUND();
 }
@@ -118,9 +118,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo >
-inline void symv( Order, UpLo, const fortran_int_t n, const float alpha,
-        const float* a, const fortran_int_t lda, const float* x,
-        const fortran_int_t incx, const float beta, float* y,
+inline void symv( const Order order, const UpLo uplo, const fortran_int_t n,
+        const float alpha, const float* a, const fortran_int_t lda,
+        const float* x, const fortran_int_t incx, const float beta, float* y,
         const fortran_int_t incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_SSYMV( &blas_option< UpLo >::value, &n, &alpha, a, &lda, x, &incx,
@@ -133,10 +133,10 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo >
-inline void symv( Order, UpLo, const fortran_int_t n, const double alpha,
-        const double* a, const fortran_int_t lda, const double* x,
-        const fortran_int_t incx, const double beta, double* y,
-        const fortran_int_t incy ) {
+inline void symv( const Order order, const UpLo uplo, const fortran_int_t n,
+        const double alpha, const double* a, const fortran_int_t lda,
+        const double* x, const fortran_int_t incx, const double beta,
+        double* y, const fortran_int_t incy ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_DSYMV( &blas_option< UpLo >::value, &n, &alpha, a, &lda, x, &incx,
             &beta, y, &incy );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -63,8 +63,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo >
-inline void syr( Order, UpLo, const int n, const float alpha, const float* x,
-        const int incx, float* a, const int lda ) {
+inline void syr( const Order order, const UpLo uplo, const int n,
+        const float alpha, const float* x, const int incx, float* a,
+        const int lda ) {
     cblas_ssyr( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
             alpha, x, incx, a, lda );
 }
@@ -75,8 +76,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo >
-inline void syr( Order, UpLo, const int n, const double alpha,
-        const double* x, const int incx, double* a, const int lda ) {
+inline void syr( const Order order, const UpLo uplo, const int n,
+        const double alpha, const double* x, const int incx, double* a,
+        const int lda ) {
     cblas_dsyr( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
             alpha, x, incx, a, lda );
 }
@@ -88,8 +90,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo >
-inline void syr( Order, UpLo, const int n, const float alpha, const float* x,
-        const int incx, float* a, const int lda ) {
+inline void syr( const Order order, const UpLo uplo, const int n,
+        const float alpha, const float* x, const int incx, float* a,
+        const int lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasSsyr( blas_option< UpLo >::value, n, alpha, x, incx, a, lda );
 }
@@ -100,8 +103,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo >
-inline void syr( Order, UpLo, const int n, const double alpha,
-        const double* x, const int incx, double* a, const int lda ) {
+inline void syr( const Order order, const UpLo uplo, const int n,
+        const double alpha, const double* x, const int incx, double* a,
+        const int lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasDsyr( blas_option< UpLo >::value, n, alpha, x, incx, a, lda );
 }
@@ -113,8 +117,8 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo >
-inline void syr( Order, UpLo, const fortran_int_t n, const float alpha,
-        const float* x, const fortran_int_t incx, float* a,
+inline void syr( const Order order, const UpLo uplo, const fortran_int_t n,
+        const float alpha, const float* x, const fortran_int_t incx, float* a,
         const fortran_int_t lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_SSYR( &blas_option< UpLo >::value, &n, &alpha, x, &incx, a, &lda );
@@ -126,9 +130,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo >
-inline void syr( Order, UpLo, const fortran_int_t n, const double alpha,
-        const double* x, const fortran_int_t incx, double* a,
-        const fortran_int_t lda ) {
+inline void syr( const Order order, const UpLo uplo, const fortran_int_t n,
+        const double alpha, const double* x, const fortran_int_t incx,
+        double* a, const fortran_int_t lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_DSYR( &blas_option< UpLo >::value, &n, &alpha, x, &incx, a, &lda );
 }
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr2.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr2.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/syr2.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -63,9 +63,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo >
-inline void syr2( Order, UpLo, const int n, const float alpha, const float* x,
-        const int incx, const float* y, const int incy, float* a,
-        const int lda ) {
+inline void syr2( const Order order, const UpLo uplo, const int n,
+        const float alpha, const float* x, const int incx, const float* y,
+        const int incy, float* a, const int lda ) {
     cblas_ssyr2( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
             alpha, x, incx, y, incy, a, lda );
 }
@@ -76,9 +76,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo >
-inline void syr2( Order, UpLo, const int n, const double alpha,
-        const double* x, const int incx, const double* y, const int incy,
-        double* a, const int lda ) {
+inline void syr2( const Order order, const UpLo uplo, const int n,
+        const double alpha, const double* x, const int incx, const double* y,
+        const int incy, double* a, const int lda ) {
     cblas_dsyr2( cblas_option< Order >::value, cblas_option< UpLo >::value, n,
             alpha, x, incx, y, incy, a, lda );
 }
@@ -90,9 +90,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo >
-inline void syr2( Order, UpLo, const int n, const float alpha, const float* x,
-        const int incx, const float* y, const int incy, float* a,
-        const int lda ) {
+inline void syr2( const Order order, const UpLo uplo, const int n,
+        const float alpha, const float* x, const int incx, const float* y,
+        const int incy, float* a, const int lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasSsyr2( blas_option< UpLo >::value, n, alpha, x, incx, y, incy, a,
             lda );
@@ -104,9 +104,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo >
-inline void syr2( Order, UpLo, const int n, const double alpha,
-        const double* x, const int incx, const double* y, const int incy,
-        double* a, const int lda ) {
+inline void syr2( const Order order, const UpLo uplo, const int n,
+        const double alpha, const double* x, const int incx, const double* y,
+        const int incy, double* a, const int lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     // NOT FOUND();
 }
@@ -118,9 +118,10 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo >
-inline void syr2( Order, UpLo, const fortran_int_t n, const float alpha,
-        const float* x, const fortran_int_t incx, const float* y,
-        const fortran_int_t incy, float* a, const fortran_int_t lda ) {
+inline void syr2( const Order order, const UpLo uplo, const fortran_int_t n,
+        const float alpha, const float* x, const fortran_int_t incx,
+        const float* y, const fortran_int_t incy, float* a,
+        const fortran_int_t lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_SSYR2( &blas_option< UpLo >::value, &n, &alpha, x, &incx, y, &incy,
             a, &lda );
@@ -132,9 +133,10 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo >
-inline void syr2( Order, UpLo, const fortran_int_t n, const double alpha,
-        const double* x, const fortran_int_t incx, const double* y,
-        const fortran_int_t incy, double* a, const fortran_int_t lda ) {
+inline void syr2( const Order order, const UpLo uplo, const fortran_int_t n,
+        const double alpha, const double* x, const fortran_int_t incx,
+        const double* y, const fortran_int_t incy, double* a,
+        const fortran_int_t lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_DSYR2( &blas_option< UpLo >::value, &n, &alpha, x, &incx, y, &incy,
             a, &lda );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbmv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbmv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -66,8 +66,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tbmv( Order, UpLo, Trans, Diag, const int n, const int k,
-        const float* a, const int lda, float* x, const int incx ) {
+inline void tbmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const int k, const float* a,
+        const int lda, float* x, const int incx ) {
     cblas_stbmv( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, cblas_option< Diag >::value, n, k,
             a, lda, x, incx );
@@ -79,8 +80,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tbmv( Order, UpLo, Trans, Diag, const int n, const int k,
-        const double* a, const int lda, double* x, const int incx ) {
+inline void tbmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const int k, const double* a,
+        const int lda, double* x, const int incx ) {
     cblas_dtbmv( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, cblas_option< Diag >::value, n, k,
             a, lda, x, incx );
@@ -92,7 +94,8 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tbmv( Order, UpLo, Trans, Diag, const int n, const int k,
+inline void tbmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const int k,
         const std::complex<float>* a, const int lda, std::complex<float>* x,
         const int incx ) {
     cblas_ctbmv( cblas_option< Order >::value, cblas_option< UpLo >::value,
@@ -106,7 +109,8 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tbmv( Order, UpLo, Trans, Diag, const int n, const int k,
+inline void tbmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const int k,
         const std::complex<double>* a, const int lda, std::complex<double>* x,
         const int incx ) {
     cblas_ztbmv( cblas_option< Order >::value, cblas_option< UpLo >::value,
@@ -121,8 +125,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tbmv( Order, UpLo, Trans, Diag, const int n, const int k,
-        const float* a, const int lda, float* x, const int incx ) {
+inline void tbmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const int k, const float* a,
+        const int lda, float* x, const int incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasStbmv( blas_option< UpLo >::value, blas_option< Trans >::value,
             blas_option< Diag >::value, n, k, a, lda, x, incx );
@@ -134,8 +139,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tbmv( Order, UpLo, Trans, Diag, const int n, const int k,
-        const double* a, const int lda, double* x, const int incx ) {
+inline void tbmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const int k, const double* a,
+        const int lda, double* x, const int incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     // NOT FOUND();
 }
@@ -146,7 +152,8 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tbmv( Order, UpLo, Trans, Diag, const int n, const int k,
+inline void tbmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const int k,
         const std::complex<float>* a, const int lda, std::complex<float>* x,
         const int incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
@@ -160,7 +167,8 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tbmv( Order, UpLo, Trans, Diag, const int n, const int k,
+inline void tbmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const int k,
         const std::complex<double>* a, const int lda, std::complex<double>* x,
         const int incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
@@ -174,9 +182,10 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tbmv( Order, UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t k, const float* a, const fortran_int_t lda,
-        float* x, const fortran_int_t incx ) {
+inline void tbmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t k,
+        const float* a, const fortran_int_t lda, float* x,
+        const fortran_int_t incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_STBMV( &blas_option< UpLo >::value, &blas_option< Trans >::value,
             &blas_option< Diag >::value, &n, &k, a, &lda, x, &incx );
@@ -188,9 +197,10 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tbmv( Order, UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t k, const double* a, const fortran_int_t lda,
-        double* x, const fortran_int_t incx ) {
+inline void tbmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t k,
+        const double* a, const fortran_int_t lda, double* x,
+        const fortran_int_t incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_DTBMV( &blas_option< UpLo >::value, &blas_option< Trans >::value,
             &blas_option< Diag >::value, &n, &k, a, &lda, x, &incx );
@@ -202,10 +212,10 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tbmv( Order, UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t k, const std::complex<float>* a,
-        const fortran_int_t lda, std::complex<float>* x,
-        const fortran_int_t incx ) {
+inline void tbmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t k,
+        const std::complex<float>* a, const fortran_int_t lda,
+        std::complex<float>* x, const fortran_int_t incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_CTBMV( &blas_option< UpLo >::value, &blas_option< Trans >::value,
             &blas_option< Diag >::value, &n, &k, a, &lda, x, &incx );
@@ -217,10 +227,10 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tbmv( Order, UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t k, const std::complex<double>* a,
-        const fortran_int_t lda, std::complex<double>* x,
-        const fortran_int_t incx ) {
+inline void tbmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t k,
+        const std::complex<double>* a, const fortran_int_t lda,
+        std::complex<double>* x, const fortran_int_t incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_ZTBMV( &blas_option< UpLo >::value, &blas_option< Trans >::value,
             &blas_option< Diag >::value, &n, &k, a, &lda, x, &incx );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbsv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbsv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tbsv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -66,8 +66,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tbsv( Order, UpLo, Trans, Diag, const int n, const int k,
-        const float* a, const int lda, float* x, const int incx ) {
+inline void tbsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const int k, const float* a,
+        const int lda, float* x, const int incx ) {
     cblas_stbsv( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, cblas_option< Diag >::value, n, k,
             a, lda, x, incx );
@@ -79,8 +80,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tbsv( Order, UpLo, Trans, Diag, const int n, const int k,
-        const double* a, const int lda, double* x, const int incx ) {
+inline void tbsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const int k, const double* a,
+        const int lda, double* x, const int incx ) {
     cblas_dtbsv( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, cblas_option< Diag >::value, n, k,
             a, lda, x, incx );
@@ -92,7 +94,8 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tbsv( Order, UpLo, Trans, Diag, const int n, const int k,
+inline void tbsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const int k,
         const std::complex<float>* a, const int lda, std::complex<float>* x,
         const int incx ) {
     cblas_ctbsv( cblas_option< Order >::value, cblas_option< UpLo >::value,
@@ -106,7 +109,8 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tbsv( Order, UpLo, Trans, Diag, const int n, const int k,
+inline void tbsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const int k,
         const std::complex<double>* a, const int lda, std::complex<double>* x,
         const int incx ) {
     cblas_ztbsv( cblas_option< Order >::value, cblas_option< UpLo >::value,
@@ -121,8 +125,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tbsv( Order, UpLo, Trans, Diag, const int n, const int k,
-        const float* a, const int lda, float* x, const int incx ) {
+inline void tbsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const int k, const float* a,
+        const int lda, float* x, const int incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasStbsv( blas_option< UpLo >::value, blas_option< Trans >::value,
             blas_option< Diag >::value, n, k, a, lda, x, incx );
@@ -134,8 +139,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tbsv( Order, UpLo, Trans, Diag, const int n, const int k,
-        const double* a, const int lda, double* x, const int incx ) {
+inline void tbsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const int k, const double* a,
+        const int lda, double* x, const int incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     // NOT FOUND();
 }
@@ -146,7 +152,8 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tbsv( Order, UpLo, Trans, Diag, const int n, const int k,
+inline void tbsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const int k,
         const std::complex<float>* a, const int lda, std::complex<float>* x,
         const int incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
@@ -160,7 +167,8 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tbsv( Order, UpLo, Trans, Diag, const int n, const int k,
+inline void tbsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const int k,
         const std::complex<double>* a, const int lda, std::complex<double>* x,
         const int incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
@@ -174,9 +182,10 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tbsv( Order, UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t k, const float* a, const fortran_int_t lda,
-        float* x, const fortran_int_t incx ) {
+inline void tbsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t k,
+        const float* a, const fortran_int_t lda, float* x,
+        const fortran_int_t incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_STBSV( &blas_option< UpLo >::value, &blas_option< Trans >::value,
             &blas_option< Diag >::value, &n, &k, a, &lda, x, &incx );
@@ -188,9 +197,10 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tbsv( Order, UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t k, const double* a, const fortran_int_t lda,
-        double* x, const fortran_int_t incx ) {
+inline void tbsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t k,
+        const double* a, const fortran_int_t lda, double* x,
+        const fortran_int_t incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_DTBSV( &blas_option< UpLo >::value, &blas_option< Trans >::value,
             &blas_option< Diag >::value, &n, &k, a, &lda, x, &incx );
@@ -202,10 +212,10 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tbsv( Order, UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t k, const std::complex<float>* a,
-        const fortran_int_t lda, std::complex<float>* x,
-        const fortran_int_t incx ) {
+inline void tbsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t k,
+        const std::complex<float>* a, const fortran_int_t lda,
+        std::complex<float>* x, const fortran_int_t incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_CTBSV( &blas_option< UpLo >::value, &blas_option< Trans >::value,
             &blas_option< Diag >::value, &n, &k, a, &lda, x, &incx );
@@ -217,10 +227,10 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tbsv( Order, UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t k, const std::complex<double>* a,
-        const fortran_int_t lda, std::complex<double>* x,
-        const fortran_int_t incx ) {
+inline void tbsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t k,
+        const std::complex<double>* a, const fortran_int_t lda,
+        std::complex<double>* x, const fortran_int_t incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_ZTBSV( &blas_option< UpLo >::value, &blas_option< Trans >::value,
             &blas_option< Diag >::value, &n, &k, a, &lda, x, &incx );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpmv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpmv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -65,8 +65,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tpmv( Order, UpLo, Trans, Diag, const int n, const float* ap,
-        float* x, const int incx ) {
+inline void tpmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const float* ap, float* x,
+        const int incx ) {
     cblas_stpmv( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, cblas_option< Diag >::value, n, ap,
             x, incx );
@@ -78,8 +79,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tpmv( Order, UpLo, Trans, Diag, const int n, const double* ap,
-        double* x, const int incx ) {
+inline void tpmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const double* ap, double* x,
+        const int incx ) {
     cblas_dtpmv( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, cblas_option< Diag >::value, n, ap,
             x, incx );
@@ -91,9 +93,9 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tpmv( Order, UpLo, Trans, Diag, const int n,
-        const std::complex<float>* ap, std::complex<float>* x,
-        const int incx ) {
+inline void tpmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const std::complex<float>* ap,
+        std::complex<float>* x, const int incx ) {
     cblas_ctpmv( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, cblas_option< Diag >::value, n, ap,
             x, incx );
@@ -105,9 +107,9 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tpmv( Order, UpLo, Trans, Diag, const int n,
-        const std::complex<double>* ap, std::complex<double>* x,
-        const int incx ) {
+inline void tpmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const std::complex<double>* ap,
+        std::complex<double>* x, const int incx ) {
     cblas_ztpmv( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, cblas_option< Diag >::value, n, ap,
             x, incx );
@@ -120,8 +122,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tpmv( Order, UpLo, Trans, Diag, const int n, const float* ap,
-        float* x, const int incx ) {
+inline void tpmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const float* ap, float* x,
+        const int incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasStpmv( blas_option< UpLo >::value, blas_option< Trans >::value,
             blas_option< Diag >::value, n, ap, x, incx );
@@ -133,8 +136,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tpmv( Order, UpLo, Trans, Diag, const int n, const double* ap,
-        double* x, const int incx ) {
+inline void tpmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const double* ap, double* x,
+        const int incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     // NOT FOUND();
 }
@@ -145,9 +149,9 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tpmv( Order, UpLo, Trans, Diag, const int n,
-        const std::complex<float>* ap, std::complex<float>* x,
-        const int incx ) {
+inline void tpmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const std::complex<float>* ap,
+        std::complex<float>* x, const int incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasCtpmv( blas_option< UpLo >::value, blas_option< Trans >::value,
             blas_option< Diag >::value, n, ap, x, incx );
@@ -159,9 +163,9 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tpmv( Order, UpLo, Trans, Diag, const int n,
-        const std::complex<double>* ap, std::complex<double>* x,
-        const int incx ) {
+inline void tpmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const std::complex<double>* ap,
+        std::complex<double>* x, const int incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     // NOT FOUND();
 }
@@ -173,8 +177,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tpmv( Order, UpLo, Trans, Diag, const fortran_int_t n,
-        const float* ap, float* x, const fortran_int_t incx ) {
+inline void tpmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const float* ap, float* x,
+        const fortran_int_t incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_STPMV( &blas_option< UpLo >::value, &blas_option< Trans >::value,
             &blas_option< Diag >::value, &n, ap, x, &incx );
@@ -186,8 +191,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tpmv( Order, UpLo, Trans, Diag, const fortran_int_t n,
-        const double* ap, double* x, const fortran_int_t incx ) {
+inline void tpmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const double* ap, double* x,
+        const fortran_int_t incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_DTPMV( &blas_option< UpLo >::value, &blas_option< Trans >::value,
             &blas_option< Diag >::value, &n, ap, x, &incx );
@@ -199,9 +205,9 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tpmv( Order, UpLo, Trans, Diag, const fortran_int_t n,
-        const std::complex<float>* ap, std::complex<float>* x,
-        const fortran_int_t incx ) {
+inline void tpmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const std::complex<float>* ap,
+        std::complex<float>* x, const fortran_int_t incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_CTPMV( &blas_option< UpLo >::value, &blas_option< Trans >::value,
             &blas_option< Diag >::value, &n, ap, x, &incx );
@@ -213,7 +219,8 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tpmv( Order, UpLo, Trans, Diag, const fortran_int_t n,
+inline void tpmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n,
         const std::complex<double>* ap, std::complex<double>* x,
         const fortran_int_t incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpsv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpsv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/tpsv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -65,8 +65,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tpsv( Order, UpLo, Trans, Diag, const int n, const float* ap,
-        float* x, const int incx ) {
+inline void tpsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const float* ap, float* x,
+        const int incx ) {
     cblas_stpsv( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, cblas_option< Diag >::value, n, ap,
             x, incx );
@@ -78,8 +79,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tpsv( Order, UpLo, Trans, Diag, const int n, const double* ap,
-        double* x, const int incx ) {
+inline void tpsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const double* ap, double* x,
+        const int incx ) {
     cblas_dtpsv( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, cblas_option< Diag >::value, n, ap,
             x, incx );
@@ -91,9 +93,9 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tpsv( Order, UpLo, Trans, Diag, const int n,
-        const std::complex<float>* ap, std::complex<float>* x,
-        const int incx ) {
+inline void tpsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const std::complex<float>* ap,
+        std::complex<float>* x, const int incx ) {
     cblas_ctpsv( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, cblas_option< Diag >::value, n, ap,
             x, incx );
@@ -105,9 +107,9 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tpsv( Order, UpLo, Trans, Diag, const int n,
-        const std::complex<double>* ap, std::complex<double>* x,
-        const int incx ) {
+inline void tpsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const std::complex<double>* ap,
+        std::complex<double>* x, const int incx ) {
     cblas_ztpsv( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, cblas_option< Diag >::value, n, ap,
             x, incx );
@@ -120,8 +122,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tpsv( Order, UpLo, Trans, Diag, const int n, const float* ap,
-        float* x, const int incx ) {
+inline void tpsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const float* ap, float* x,
+        const int incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasStpsv( blas_option< UpLo >::value, blas_option< Trans >::value,
             blas_option< Diag >::value, n, ap, x, incx );
@@ -133,8 +136,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tpsv( Order, UpLo, Trans, Diag, const int n, const double* ap,
-        double* x, const int incx ) {
+inline void tpsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const double* ap, double* x,
+        const int incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     // NOT FOUND();
 }
@@ -145,9 +149,9 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tpsv( Order, UpLo, Trans, Diag, const int n,
-        const std::complex<float>* ap, std::complex<float>* x,
-        const int incx ) {
+inline void tpsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const std::complex<float>* ap,
+        std::complex<float>* x, const int incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasCtpsv( blas_option< UpLo >::value, blas_option< Trans >::value,
             blas_option< Diag >::value, n, ap, x, incx );
@@ -159,9 +163,9 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tpsv( Order, UpLo, Trans, Diag, const int n,
-        const std::complex<double>* ap, std::complex<double>* x,
-        const int incx ) {
+inline void tpsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const std::complex<double>* ap,
+        std::complex<double>* x, const int incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     // NOT FOUND();
 }
@@ -173,8 +177,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tpsv( Order, UpLo, Trans, Diag, const fortran_int_t n,
-        const float* ap, float* x, const fortran_int_t incx ) {
+inline void tpsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const float* ap, float* x,
+        const fortran_int_t incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_STPSV( &blas_option< UpLo >::value, &blas_option< Trans >::value,
             &blas_option< Diag >::value, &n, ap, x, &incx );
@@ -186,8 +191,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tpsv( Order, UpLo, Trans, Diag, const fortran_int_t n,
-        const double* ap, double* x, const fortran_int_t incx ) {
+inline void tpsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const double* ap, double* x,
+        const fortran_int_t incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_DTPSV( &blas_option< UpLo >::value, &blas_option< Trans >::value,
             &blas_option< Diag >::value, &n, ap, x, &incx );
@@ -199,9 +205,9 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tpsv( Order, UpLo, Trans, Diag, const fortran_int_t n,
-        const std::complex<float>* ap, std::complex<float>* x,
-        const fortran_int_t incx ) {
+inline void tpsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const std::complex<float>* ap,
+        std::complex<float>* x, const fortran_int_t incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_CTPSV( &blas_option< UpLo >::value, &blas_option< Trans >::value,
             &blas_option< Diag >::value, &n, ap, x, &incx );
@@ -213,7 +219,8 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void tpsv( Order, UpLo, Trans, Diag, const fortran_int_t n,
+inline void tpsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n,
         const std::complex<double>* ap, std::complex<double>* x,
         const fortran_int_t incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trmv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trmv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trmv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -65,8 +65,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void trmv( Order, UpLo, Trans, Diag, const int n, const float* a,
-        const int lda, float* x, const int incx ) {
+inline void trmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const float* a, const int lda, float* x,
+        const int incx ) {
     cblas_strmv( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, cblas_option< Diag >::value, n, a,
             lda, x, incx );
@@ -78,8 +79,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void trmv( Order, UpLo, Trans, Diag, const int n, const double* a,
-        const int lda, double* x, const int incx ) {
+inline void trmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const double* a, const int lda,
+        double* x, const int incx ) {
     cblas_dtrmv( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, cblas_option< Diag >::value, n, a,
             lda, x, incx );
@@ -91,9 +93,9 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void trmv( Order, UpLo, Trans, Diag, const int n,
-        const std::complex<float>* a, const int lda, std::complex<float>* x,
-        const int incx ) {
+inline void trmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const std::complex<float>* a,
+        const int lda, std::complex<float>* x, const int incx ) {
     cblas_ctrmv( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, cblas_option< Diag >::value, n, a,
             lda, x, incx );
@@ -105,9 +107,9 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void trmv( Order, UpLo, Trans, Diag, const int n,
-        const std::complex<double>* a, const int lda, std::complex<double>* x,
-        const int incx ) {
+inline void trmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const std::complex<double>* a,
+        const int lda, std::complex<double>* x, const int incx ) {
     cblas_ztrmv( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, cblas_option< Diag >::value, n, a,
             lda, x, incx );
@@ -120,8 +122,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void trmv( Order, UpLo, Trans, Diag, const int n, const float* a,
-        const int lda, float* x, const int incx ) {
+inline void trmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const float* a, const int lda, float* x,
+        const int incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasStrmv( blas_option< UpLo >::value, blas_option< Trans >::value,
             blas_option< Diag >::value, n, a, lda, x, incx );
@@ -133,8 +136,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void trmv( Order, UpLo, Trans, Diag, const int n, const double* a,
-        const int lda, double* x, const int incx ) {
+inline void trmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const double* a, const int lda,
+        double* x, const int incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     // NOT FOUND();
 }
@@ -145,9 +149,9 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void trmv( Order, UpLo, Trans, Diag, const int n,
-        const std::complex<float>* a, const int lda, std::complex<float>* x,
-        const int incx ) {
+inline void trmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const std::complex<float>* a,
+        const int lda, std::complex<float>* x, const int incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     // NOT FOUND();
 }
@@ -158,9 +162,9 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void trmv( Order, UpLo, Trans, Diag, const int n,
-        const std::complex<double>* a, const int lda, std::complex<double>* x,
-        const int incx ) {
+inline void trmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const std::complex<double>* a,
+        const int lda, std::complex<double>* x, const int incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     // NOT FOUND();
 }
@@ -172,9 +176,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void trmv( Order, UpLo, Trans, Diag, const fortran_int_t n,
-        const float* a, const fortran_int_t lda, float* x,
-        const fortran_int_t incx ) {
+inline void trmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const float* a,
+        const fortran_int_t lda, float* x, const fortran_int_t incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_STRMV( &blas_option< UpLo >::value, &blas_option< Trans >::value,
             &blas_option< Diag >::value, &n, a, &lda, x, &incx );
@@ -186,9 +190,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void trmv( Order, UpLo, Trans, Diag, const fortran_int_t n,
-        const double* a, const fortran_int_t lda, double* x,
-        const fortran_int_t incx ) {
+inline void trmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const double* a,
+        const fortran_int_t lda, double* x, const fortran_int_t incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_DTRMV( &blas_option< UpLo >::value, &blas_option< Trans >::value,
             &blas_option< Diag >::value, &n, a, &lda, x, &incx );
@@ -200,9 +204,10 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void trmv( Order, UpLo, Trans, Diag, const fortran_int_t n,
-        const std::complex<float>* a, const fortran_int_t lda,
-        std::complex<float>* x, const fortran_int_t incx ) {
+inline void trmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const std::complex<float>* a,
+        const fortran_int_t lda, std::complex<float>* x,
+        const fortran_int_t incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_CTRMV( &blas_option< UpLo >::value, &blas_option< Trans >::value,
             &blas_option< Diag >::value, &n, a, &lda, x, &incx );
@@ -214,9 +219,10 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void trmv( Order, UpLo, Trans, Diag, const fortran_int_t n,
-        const std::complex<double>* a, const fortran_int_t lda,
-        std::complex<double>* x, const fortran_int_t incx ) {
+inline void trmv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const std::complex<double>* a,
+        const fortran_int_t lda, std::complex<double>* x,
+        const fortran_int_t incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_ZTRMV( &blas_option< UpLo >::value, &blas_option< Trans >::value,
             &blas_option< Diag >::value, &n, a, &lda, x, &incx );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trsv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trsv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level2/trsv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -65,8 +65,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void trsv( Order, UpLo, Trans, Diag, const int n, const float* a,
-        const int lda, float* x, const int incx ) {
+inline void trsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const float* a, const int lda, float* x,
+        const int incx ) {
     cblas_strsv( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, cblas_option< Diag >::value, n, a,
             lda, x, incx );
@@ -78,8 +79,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void trsv( Order, UpLo, Trans, Diag, const int n, const double* a,
-        const int lda, double* x, const int incx ) {
+inline void trsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const double* a, const int lda,
+        double* x, const int incx ) {
     cblas_dtrsv( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, cblas_option< Diag >::value, n, a,
             lda, x, incx );
@@ -91,9 +93,9 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void trsv( Order, UpLo, Trans, Diag, const int n,
-        const std::complex<float>* a, const int lda, std::complex<float>* x,
-        const int incx ) {
+inline void trsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const std::complex<float>* a,
+        const int lda, std::complex<float>* x, const int incx ) {
     cblas_ctrsv( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, cblas_option< Diag >::value, n, a,
             lda, x, incx );
@@ -105,9 +107,9 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void trsv( Order, UpLo, Trans, Diag, const int n,
-        const std::complex<double>* a, const int lda, std::complex<double>* x,
-        const int incx ) {
+inline void trsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const std::complex<double>* a,
+        const int lda, std::complex<double>* x, const int incx ) {
     cblas_ztrsv( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, cblas_option< Diag >::value, n, a,
             lda, x, incx );
@@ -120,8 +122,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void trsv( Order, UpLo, Trans, Diag, const int n, const float* a,
-        const int lda, float* x, const int incx ) {
+inline void trsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const float* a, const int lda, float* x,
+        const int incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasStrsv( blas_option< UpLo >::value, blas_option< Trans >::value,
             blas_option< Diag >::value, n, a, lda, x, incx );
@@ -133,8 +136,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void trsv( Order, UpLo, Trans, Diag, const int n, const double* a,
-        const int lda, double* x, const int incx ) {
+inline void trsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const double* a, const int lda,
+        double* x, const int incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasDtrsv( blas_option< UpLo >::value, blas_option< Trans >::value,
             blas_option< Diag >::value, n, a, lda, x, incx );
@@ -146,9 +150,9 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void trsv( Order, UpLo, Trans, Diag, const int n,
-        const std::complex<float>* a, const int lda, std::complex<float>* x,
-        const int incx ) {
+inline void trsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const std::complex<float>* a,
+        const int lda, std::complex<float>* x, const int incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasCtrsv( blas_option< UpLo >::value, blas_option< Trans >::value,
             blas_option< Diag >::value, n, a, lda, x, incx );
@@ -160,9 +164,9 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void trsv( Order, UpLo, Trans, Diag, const int n,
-        const std::complex<double>* a, const int lda, std::complex<double>* x,
-        const int incx ) {
+inline void trsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const int n, const std::complex<double>* a,
+        const int lda, std::complex<double>* x, const int incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     // NOT FOUND();
 }
@@ -174,9 +178,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void trsv( Order, UpLo, Trans, Diag, const fortran_int_t n,
-        const float* a, const fortran_int_t lda, float* x,
-        const fortran_int_t incx ) {
+inline void trsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const float* a,
+        const fortran_int_t lda, float* x, const fortran_int_t incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_STRSV( &blas_option< UpLo >::value, &blas_option< Trans >::value,
             &blas_option< Diag >::value, &n, a, &lda, x, &incx );
@@ -188,9 +192,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void trsv( Order, UpLo, Trans, Diag, const fortran_int_t n,
-        const double* a, const fortran_int_t lda, double* x,
-        const fortran_int_t incx ) {
+inline void trsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const double* a,
+        const fortran_int_t lda, double* x, const fortran_int_t incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_DTRSV( &blas_option< UpLo >::value, &blas_option< Trans >::value,
             &blas_option< Diag >::value, &n, a, &lda, x, &incx );
@@ -202,9 +206,10 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void trsv( Order, UpLo, Trans, Diag, const fortran_int_t n,
-        const std::complex<float>* a, const fortran_int_t lda,
-        std::complex<float>* x, const fortran_int_t incx ) {
+inline void trsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const std::complex<float>* a,
+        const fortran_int_t lda, std::complex<float>* x,
+        const fortran_int_t incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_CTRSV( &blas_option< UpLo >::value, &blas_option< Trans >::value,
             &blas_option< Diag >::value, &n, a, &lda, x, &incx );
@@ -216,9 +221,10 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans, typename Diag >
-inline void trsv( Order, UpLo, Trans, Diag, const fortran_int_t n,
-        const std::complex<double>* a, const fortran_int_t lda,
-        std::complex<double>* x, const fortran_int_t incx ) {
+inline void trsv( const Order order, const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const std::complex<double>* a,
+        const fortran_int_t lda, std::complex<double>* x,
+        const fortran_int_t incx ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_ZTRSV( &blas_option< UpLo >::value, &blas_option< Trans >::value,
             &blas_option< Diag >::value, &n, a, &lda, x, &incx );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/gemm.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/gemm.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/gemm.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -63,10 +63,10 @@
 // * float value-type.
 //
 template< typename Order, typename TransA, typename TransB >
-inline void gemm( Order, TransA, TransB, const int m, const int n,
-        const int k, const float alpha, const float* a, const int lda,
-        const float* b, const int ldb, const float beta, float* c,
-        const int ldc ) {
+inline void gemm( const Order order, const TransA transa, const TransB transb,
+        const int m, const int n, const int k, const float alpha,
+        const float* a, const int lda, const float* b, const int ldb,
+        const float beta, float* c, const int ldc ) {
     cblas_sgemm( cblas_option< Order >::value, cblas_option< TransA >::value,
             cblas_option< TransB >::value, m, n, k, alpha, a, lda, b, ldb,
             beta, c, ldc );
@@ -78,10 +78,10 @@
 // * double value-type.
 //
 template< typename Order, typename TransA, typename TransB >
-inline void gemm( Order, TransA, TransB, const int m, const int n,
-        const int k, const double alpha, const double* a, const int lda,
-        const double* b, const int ldb, const double beta, double* c,
-        const int ldc ) {
+inline void gemm( const Order order, const TransA transa, const TransB transb,
+        const int m, const int n, const int k, const double alpha,
+        const double* a, const int lda, const double* b, const int ldb,
+        const double beta, double* c, const int ldc ) {
     cblas_dgemm( cblas_option< Order >::value, cblas_option< TransA >::value,
             cblas_option< TransB >::value, m, n, k, alpha, a, lda, b, ldb,
             beta, c, ldc );
@@ -93,10 +93,10 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename TransA, typename TransB >
-inline void gemm( Order, TransA, TransB, const int m, const int n,
-        const int k, const std::complex<float> alpha,
-        const std::complex<float>* a, const int lda,
-        const std::complex<float>* b, const int ldb,
+inline void gemm( const Order order, const TransA transa, const TransB transb,
+        const int m, const int n, const int k,
+        const std::complex<float> alpha, const std::complex<float>* a,
+        const int lda, const std::complex<float>* b, const int ldb,
         const std::complex<float> beta, std::complex<float>* c,
         const int ldc ) {
     cblas_cgemm( cblas_option< Order >::value, cblas_option< TransA >::value,
@@ -110,10 +110,10 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename TransA, typename TransB >
-inline void gemm( Order, TransA, TransB, const int m, const int n,
-        const int k, const std::complex<double> alpha,
-        const std::complex<double>* a, const int lda,
-        const std::complex<double>* b, const int ldb,
+inline void gemm( const Order order, const TransA transa, const TransB transb,
+        const int m, const int n, const int k,
+        const std::complex<double> alpha, const std::complex<double>* a,
+        const int lda, const std::complex<double>* b, const int ldb,
         const std::complex<double> beta, std::complex<double>* c,
         const int ldc ) {
     cblas_zgemm( cblas_option< Order >::value, cblas_option< TransA >::value,
@@ -128,10 +128,10 @@
 // * float value-type.
 //
 template< typename Order, typename TransA, typename TransB >
-inline void gemm( Order, TransA, TransB, const int m, const int n,
-        const int k, const float alpha, const float* a, const int lda,
-        const float* b, const int ldb, const float beta, float* c,
-        const int ldc ) {
+inline void gemm( const Order order, const TransA transa, const TransB transb,
+        const int m, const int n, const int k, const float alpha,
+        const float* a, const int lda, const float* b, const int ldb,
+        const float beta, float* c, const int ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasSgemm( blas_option< TransA >::value, blas_option< TransB >::value,
             m, n, k, alpha, a, lda, b, ldb, beta, c, ldc );
@@ -143,10 +143,10 @@
 // * double value-type.
 //
 template< typename Order, typename TransA, typename TransB >
-inline void gemm( Order, TransA, TransB, const int m, const int n,
-        const int k, const double alpha, const double* a, const int lda,
-        const double* b, const int ldb, const double beta, double* c,
-        const int ldc ) {
+inline void gemm( const Order order, const TransA transa, const TransB transb,
+        const int m, const int n, const int k, const double alpha,
+        const double* a, const int lda, const double* b, const int ldb,
+        const double beta, double* c, const int ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasDgemm( blas_option< TransA >::value, blas_option< TransB >::value,
             m, n, k, alpha, a, lda, b, ldb, beta, c, ldc );
@@ -158,10 +158,10 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename TransA, typename TransB >
-inline void gemm( Order, TransA, TransB, const int m, const int n,
-        const int k, const std::complex<float> alpha,
-        const std::complex<float>* a, const int lda,
-        const std::complex<float>* b, const int ldb,
+inline void gemm( const Order order, const TransA transa, const TransB transb,
+        const int m, const int n, const int k,
+        const std::complex<float> alpha, const std::complex<float>* a,
+        const int lda, const std::complex<float>* b, const int ldb,
         const std::complex<float> beta, std::complex<float>* c,
         const int ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
@@ -175,10 +175,10 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename TransA, typename TransB >
-inline void gemm( Order, TransA, TransB, const int m, const int n,
-        const int k, const std::complex<double> alpha,
-        const std::complex<double>* a, const int lda,
-        const std::complex<double>* b, const int ldb,
+inline void gemm( const Order order, const TransA transa, const TransB transb,
+        const int m, const int n, const int k,
+        const std::complex<double> alpha, const std::complex<double>* a,
+        const int lda, const std::complex<double>* b, const int ldb,
         const std::complex<double> beta, std::complex<double>* c,
         const int ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
@@ -193,10 +193,10 @@
 // * float value-type.
 //
 template< typename Order, typename TransA, typename TransB >
-inline void gemm( Order, TransA, TransB, const fortran_int_t m,
-        const fortran_int_t n, const fortran_int_t k, const float alpha,
-        const float* a, const fortran_int_t lda, const float* b,
-        const fortran_int_t ldb, const float beta, float* c,
+inline void gemm( const Order order, const TransA transa, const TransB transb,
+        const fortran_int_t m, const fortran_int_t n, const fortran_int_t k,
+        const float alpha, const float* a, const fortran_int_t lda,
+        const float* b, const fortran_int_t ldb, const float beta, float* c,
         const fortran_int_t ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_SGEMM( &blas_option< TransA >::value, &blas_option< TransB >::value,
@@ -209,11 +209,11 @@
 // * double value-type.
 //
 template< typename Order, typename TransA, typename TransB >
-inline void gemm( Order, TransA, TransB, const fortran_int_t m,
-        const fortran_int_t n, const fortran_int_t k, const double alpha,
-        const double* a, const fortran_int_t lda, const double* b,
-        const fortran_int_t ldb, const double beta, double* c,
-        const fortran_int_t ldc ) {
+inline void gemm( const Order order, const TransA transa, const TransB transb,
+        const fortran_int_t m, const fortran_int_t n, const fortran_int_t k,
+        const double alpha, const double* a, const fortran_int_t lda,
+        const double* b, const fortran_int_t ldb, const double beta,
+        double* c, const fortran_int_t ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_DGEMM( &blas_option< TransA >::value, &blas_option< TransB >::value,
             &m, &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc );
@@ -225,8 +225,8 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename TransA, typename TransB >
-inline void gemm( Order, TransA, TransB, const fortran_int_t m,
-        const fortran_int_t n, const fortran_int_t k,
+inline void gemm( const Order order, const TransA transa, const TransB transb,
+        const fortran_int_t m, const fortran_int_t n, const fortran_int_t k,
         const std::complex<float> alpha, const std::complex<float>* a,
         const fortran_int_t lda, const std::complex<float>* b,
         const fortran_int_t ldb, const std::complex<float> beta,
@@ -242,8 +242,8 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename TransA, typename TransB >
-inline void gemm( Order, TransA, TransB, const fortran_int_t m,
-        const fortran_int_t n, const fortran_int_t k,
+inline void gemm( const Order order, const TransA transa, const TransB transb,
+        const fortran_int_t m, const fortran_int_t n, const fortran_int_t k,
         const std::complex<double> alpha, const std::complex<double>* a,
         const fortran_int_t lda, const std::complex<double>* b,
         const fortran_int_t ldb, const std::complex<double> beta,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/hemm.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/hemm.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/hemm.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -62,10 +62,11 @@
 // * CBLAS backend, and
 // * complex<float> value-type.
 //
-template< typename Order, typename UpLo >
-inline void hemm( Order, const char side, UpLo, const int m, const int n,
-        const std::complex<float> alpha, const std::complex<float>* a,
-        const int lda, const std::complex<float>* b, const int ldb,
+template< typename Order, typename Side, typename UpLo >
+inline void hemm( const Order order, const Side side, const UpLo uplo,
+        const int m, const int n, const std::complex<float> alpha,
+        const std::complex<float>* a, const int lda,
+        const std::complex<float>* b, const int ldb,
         const std::complex<float> beta, std::complex<float>* c,
         const int ldc ) {
     cblas_chemm( cblas_option< Order >::value, cblas_option< Side >::value,
@@ -78,10 +79,11 @@
 // * CBLAS backend, and
 // * complex<double> value-type.
 //
-template< typename Order, typename UpLo >
-inline void hemm( Order, const char side, UpLo, const int m, const int n,
-        const std::complex<double> alpha, const std::complex<double>* a,
-        const int lda, const std::complex<double>* b, const int ldb,
+template< typename Order, typename Side, typename UpLo >
+inline void hemm( const Order order, const Side side, const UpLo uplo,
+        const int m, const int n, const std::complex<double> alpha,
+        const std::complex<double>* a, const int lda,
+        const std::complex<double>* b, const int ldb,
         const std::complex<double> beta, std::complex<double>* c,
         const int ldc ) {
     cblas_zhemm( cblas_option< Order >::value, cblas_option< Side >::value,
@@ -95,15 +97,16 @@
 // * CUBLAS backend, and
 // * complex<float> value-type.
 //
-template< typename Order, typename UpLo >
-inline void hemm( Order, const char side, UpLo, const int m, const int n,
-        const std::complex<float> alpha, const std::complex<float>* a,
-        const int lda, const std::complex<float>* b, const int ldb,
+template< typename Order, typename Side, typename UpLo >
+inline void hemm( const Order order, const Side side, const UpLo uplo,
+        const int m, const int n, const std::complex<float> alpha,
+        const std::complex<float>* a, const int lda,
+        const std::complex<float>* b, const int ldb,
         const std::complex<float> beta, std::complex<float>* c,
         const int ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
-    cublasChemm( side, blas_option< UpLo >::value, m, n, alpha, a, lda, b,
-            ldb, beta, c, ldc );
+    cublasChemm( blas_option< Side >::value, blas_option< UpLo >::value, m, n,
+            alpha, a, lda, b, ldb, beta, c, ldc );
 }
 
 //
@@ -111,10 +114,11 @@
 // * CUBLAS backend, and
 // * complex<double> value-type.
 //
-template< typename Order, typename UpLo >
-inline void hemm( Order, const char side, UpLo, const int m, const int n,
-        const std::complex<double> alpha, const std::complex<double>* a,
-        const int lda, const std::complex<double>* b, const int ldb,
+template< typename Order, typename Side, typename UpLo >
+inline void hemm( const Order order, const Side side, const UpLo uplo,
+        const int m, const int n, const std::complex<double> alpha,
+        const std::complex<double>* a, const int lda,
+        const std::complex<double>* b, const int ldb,
         const std::complex<double> beta, std::complex<double>* c,
         const int ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
@@ -127,16 +131,16 @@
 // * netlib-compatible BLAS backend (the default), and
 // * complex<float> value-type.
 //
-template< typename Order, typename UpLo >
-inline void hemm( Order, const char side, UpLo, const fortran_int_t m,
-        const fortran_int_t n, const std::complex<float> alpha,
-        const std::complex<float>* a, const fortran_int_t lda,
-        const std::complex<float>* b, const fortran_int_t ldb,
-        const std::complex<float> beta, std::complex<float>* c,
-        const fortran_int_t ldc ) {
+template< typename Order, typename Side, typename UpLo >
+inline void hemm( const Order order, const Side side, const UpLo uplo,
+        const fortran_int_t m, const fortran_int_t n,
+        const std::complex<float> alpha, const std::complex<float>* a,
+        const fortran_int_t lda, const std::complex<float>* b,
+        const fortran_int_t ldb, const std::complex<float> beta,
+        std::complex<float>* c, const fortran_int_t ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
-    BLAS_CHEMM( &side, &blas_option< UpLo >::value, &m, &n, &alpha, a, &lda,
-            b, &ldb, &beta, c, &ldc );
+    BLAS_CHEMM( &blas_option< Side >::value, &blas_option< UpLo >::value, &m,
+            &n, &alpha, a, &lda, b, &ldb, &beta, c, &ldc );
 }
 
 //
@@ -144,16 +148,16 @@
 // * netlib-compatible BLAS backend (the default), and
 // * complex<double> value-type.
 //
-template< typename Order, typename UpLo >
-inline void hemm( Order, const char side, UpLo, const fortran_int_t m,
-        const fortran_int_t n, const std::complex<double> alpha,
-        const std::complex<double>* a, const fortran_int_t lda,
-        const std::complex<double>* b, const fortran_int_t ldb,
-        const std::complex<double> beta, std::complex<double>* c,
-        const fortran_int_t ldc ) {
+template< typename Order, typename Side, typename UpLo >
+inline void hemm( const Order order, const Side side, const UpLo uplo,
+        const fortran_int_t m, const fortran_int_t n,
+        const std::complex<double> alpha, const std::complex<double>* a,
+        const fortran_int_t lda, const std::complex<double>* b,
+        const fortran_int_t ldb, const std::complex<double> beta,
+        std::complex<double>* c, const fortran_int_t ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
-    BLAS_ZHEMM( &side, &blas_option< UpLo >::value, &m, &n, &alpha, a, &lda,
-            b, &ldb, &beta, c, &ldc );
+    BLAS_ZHEMM( &blas_option< Side >::value, &blas_option< UpLo >::value, &m,
+            &n, &alpha, a, &lda, b, &ldb, &beta, c, &ldc );
 }
 
 #endif
@@ -176,8 +180,9 @@
     // * Deduces the required arguments for dispatching to BLAS, and
     // * Asserts that most arguments make sense.
     //
-    template< typename MatrixA, typename MatrixB, typename MatrixC >
-    static return_type invoke( const char side, const value_type alpha,
+    template< typename Side, typename MatrixA, typename MatrixB,
+            typename MatrixC >
+    static return_type invoke( const Side side, const value_type alpha,
             const MatrixA& a, const MatrixB& b, const value_type beta,
             MatrixC& c ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -198,7 +203,6 @@
                 bindings::stride_minor(b) == 1 );
         BOOST_ASSERT( bindings::size_minor(c) == 1 ||
                 bindings::stride_minor(c) == 1 );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         detail::hemm( order(), side, uplo(), bindings::size_row(c),
                 bindings::size_column(c), alpha, bindings::begin_value(a),
                 bindings::stride_major(a), bindings::begin_value(b),
@@ -219,10 +223,10 @@
 // Overloaded function for hemm. Its overload differs for
 // * MatrixC&
 //
-template< typename MatrixA, typename MatrixB, typename MatrixC >
+template< typename Side, typename MatrixA, typename MatrixB, typename MatrixC >
 inline typename hemm_impl< typename bindings::value_type<
         MatrixA >::type >::return_type
-hemm( const char side, const typename bindings::value_type<
+hemm( const Side side, const typename bindings::value_type<
         MatrixA >::type alpha, const MatrixA& a, const MatrixB& b,
         const typename bindings::value_type< MatrixA >::type beta,
         MatrixC& c ) {
@@ -234,10 +238,10 @@
 // Overloaded function for hemm. Its overload differs for
 // * const MatrixC&
 //
-template< typename MatrixA, typename MatrixB, typename MatrixC >
+template< typename Side, typename MatrixA, typename MatrixB, typename MatrixC >
 inline typename hemm_impl< typename bindings::value_type<
         MatrixA >::type >::return_type
-hemm( const char side, const typename bindings::value_type<
+hemm( const Side side, const typename bindings::value_type<
         MatrixA >::type alpha, const MatrixA& a, const MatrixB& b,
         const typename bindings::value_type< MatrixA >::type beta,
         const MatrixC& c ) {
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/her2k.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/her2k.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/her2k.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -64,10 +64,11 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void her2k( Order, UpLo, Trans, const int n, const int k,
-        const std::complex<float> alpha, const std::complex<float>* a,
-        const int lda, const std::complex<float>* b, const int ldb,
-        const float beta, std::complex<float>* c, const int ldc ) {
+inline void her2k( const Order order, const UpLo uplo, const Trans trans,
+        const int n, const int k, const std::complex<float> alpha,
+        const std::complex<float>* a, const int lda,
+        const std::complex<float>* b, const int ldb, const float beta,
+        std::complex<float>* c, const int ldc ) {
     cblas_cher2k( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, n, k, &alpha, a, lda, b, ldb, beta,
             c, ldc );
@@ -79,10 +80,11 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void her2k( Order, UpLo, Trans, const int n, const int k,
-        const std::complex<double> alpha, const std::complex<double>* a,
-        const int lda, const std::complex<double>* b, const int ldb,
-        const double beta, std::complex<double>* c, const int ldc ) {
+inline void her2k( const Order order, const UpLo uplo, const Trans trans,
+        const int n, const int k, const std::complex<double> alpha,
+        const std::complex<double>* a, const int lda,
+        const std::complex<double>* b, const int ldb, const double beta,
+        std::complex<double>* c, const int ldc ) {
     cblas_zher2k( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, n, k, &alpha, a, lda, b, ldb, beta,
             c, ldc );
@@ -95,10 +97,11 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void her2k( Order, UpLo, Trans, const int n, const int k,
-        const std::complex<float> alpha, const std::complex<float>* a,
-        const int lda, const std::complex<float>* b, const int ldb,
-        const float beta, std::complex<float>* c, const int ldc ) {
+inline void her2k( const Order order, const UpLo uplo, const Trans trans,
+        const int n, const int k, const std::complex<float> alpha,
+        const std::complex<float>* a, const int lda,
+        const std::complex<float>* b, const int ldb, const float beta,
+        std::complex<float>* c, const int ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasCher2k( blas_option< UpLo >::value, blas_option< Trans >::value, n,
             k, alpha, a, lda, b, ldb, beta, c, ldc );
@@ -110,10 +113,11 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void her2k( Order, UpLo, Trans, const int n, const int k,
-        const std::complex<double> alpha, const std::complex<double>* a,
-        const int lda, const std::complex<double>* b, const int ldb,
-        const double beta, std::complex<double>* c, const int ldc ) {
+inline void her2k( const Order order, const UpLo uplo, const Trans trans,
+        const int n, const int k, const std::complex<double> alpha,
+        const std::complex<double>* a, const int lda,
+        const std::complex<double>* b, const int ldb, const double beta,
+        std::complex<double>* c, const int ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     // NOT FOUND();
 }
@@ -125,11 +129,12 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void her2k( Order, UpLo, Trans, const fortran_int_t n,
-        const fortran_int_t k, const std::complex<float> alpha,
-        const std::complex<float>* a, const fortran_int_t lda,
-        const std::complex<float>* b, const fortran_int_t ldb,
-        const float beta, std::complex<float>* c, const fortran_int_t ldc ) {
+inline void her2k( const Order order, const UpLo uplo, const Trans trans,
+        const fortran_int_t n, const fortran_int_t k,
+        const std::complex<float> alpha, const std::complex<float>* a,
+        const fortran_int_t lda, const std::complex<float>* b,
+        const fortran_int_t ldb, const float beta, std::complex<float>* c,
+        const fortran_int_t ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_CHER2K( &blas_option< UpLo >::value, &blas_option< Trans >::value,
             &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc );
@@ -141,11 +146,12 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void her2k( Order, UpLo, Trans, const fortran_int_t n,
-        const fortran_int_t k, const std::complex<double> alpha,
-        const std::complex<double>* a, const fortran_int_t lda,
-        const std::complex<double>* b, const fortran_int_t ldb,
-        const double beta, std::complex<double>* c, const fortran_int_t ldc ) {
+inline void her2k( const Order order, const UpLo uplo, const Trans trans,
+        const fortran_int_t n, const fortran_int_t k,
+        const std::complex<double> alpha, const std::complex<double>* a,
+        const fortran_int_t lda, const std::complex<double>* b,
+        const fortran_int_t ldb, const double beta, std::complex<double>* c,
+        const fortran_int_t ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_ZHER2K( &blas_option< UpLo >::value, &blas_option< Trans >::value,
             &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/herk.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/herk.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/herk.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -64,9 +64,10 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void herk( Order, UpLo, Trans, const int n, const int k,
-        const float alpha, const std::complex<float>* a, const int lda,
-        const float beta, std::complex<float>* c, const int ldc ) {
+inline void herk( const Order order, const UpLo uplo, const Trans trans,
+        const int n, const int k, const float alpha,
+        const std::complex<float>* a, const int lda, const float beta,
+        std::complex<float>* c, const int ldc ) {
     cblas_cherk( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, n, k, alpha, a, lda, beta, c, ldc );
 }
@@ -77,9 +78,10 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void herk( Order, UpLo, Trans, const int n, const int k,
-        const double alpha, const std::complex<double>* a, const int lda,
-        const double beta, std::complex<double>* c, const int ldc ) {
+inline void herk( const Order order, const UpLo uplo, const Trans trans,
+        const int n, const int k, const double alpha,
+        const std::complex<double>* a, const int lda, const double beta,
+        std::complex<double>* c, const int ldc ) {
     cblas_zherk( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, n, k, alpha, a, lda, beta, c, ldc );
 }
@@ -91,9 +93,10 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void herk( Order, UpLo, Trans, const int n, const int k,
-        const float alpha, const std::complex<float>* a, const int lda,
-        const float beta, std::complex<float>* c, const int ldc ) {
+inline void herk( const Order order, const UpLo uplo, const Trans trans,
+        const int n, const int k, const float alpha,
+        const std::complex<float>* a, const int lda, const float beta,
+        std::complex<float>* c, const int ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasCherk( blas_option< UpLo >::value, blas_option< Trans >::value, n,
             k, alpha, a, lda, beta, c, ldc );
@@ -105,9 +108,10 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void herk( Order, UpLo, Trans, const int n, const int k,
-        const double alpha, const std::complex<double>* a, const int lda,
-        const double beta, std::complex<double>* c, const int ldc ) {
+inline void herk( const Order order, const UpLo uplo, const Trans trans,
+        const int n, const int k, const double alpha,
+        const std::complex<double>* a, const int lda, const double beta,
+        std::complex<double>* c, const int ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     // NOT FOUND();
 }
@@ -119,8 +123,8 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void herk( Order, UpLo, Trans, const fortran_int_t n,
-        const fortran_int_t k, const float alpha,
+inline void herk( const Order order, const UpLo uplo, const Trans trans,
+        const fortran_int_t n, const fortran_int_t k, const float alpha,
         const std::complex<float>* a, const fortran_int_t lda,
         const float beta, std::complex<float>* c, const fortran_int_t ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
@@ -134,8 +138,8 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void herk( Order, UpLo, Trans, const fortran_int_t n,
-        const fortran_int_t k, const double alpha,
+inline void herk( const Order order, const UpLo uplo, const Trans trans,
+        const fortran_int_t n, const fortran_int_t k, const double alpha,
         const std::complex<double>* a, const fortran_int_t lda,
         const double beta, std::complex<double>* c, const fortran_int_t ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/symm.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/symm.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/symm.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -62,10 +62,11 @@
 // * CBLAS backend, and
 // * float value-type.
 //
-template< typename Order, typename UpLo >
-inline void symm( Order, const char side, UpLo, const int m, const int n,
-        const float alpha, const float* a, const int lda, const float* b,
-        const int ldb, const float beta, float* c, const int ldc ) {
+template< typename Order, typename Side, typename UpLo >
+inline void symm( const Order order, const Side side, const UpLo uplo,
+        const int m, const int n, const float alpha, const float* a,
+        const int lda, const float* b, const int ldb, const float beta,
+        float* c, const int ldc ) {
     cblas_ssymm( cblas_option< Order >::value, cblas_option< Side >::value,
             cblas_option< UpLo >::value, m, n, alpha, a, lda, b, ldb, beta, c,
             ldc );
@@ -76,10 +77,11 @@
 // * CBLAS backend, and
 // * double value-type.
 //
-template< typename Order, typename UpLo >
-inline void symm( Order, const char side, UpLo, const int m, const int n,
-        const double alpha, const double* a, const int lda, const double* b,
-        const int ldb, const double beta, double* c, const int ldc ) {
+template< typename Order, typename Side, typename UpLo >
+inline void symm( const Order order, const Side side, const UpLo uplo,
+        const int m, const int n, const double alpha, const double* a,
+        const int lda, const double* b, const int ldb, const double beta,
+        double* c, const int ldc ) {
     cblas_dsymm( cblas_option< Order >::value, cblas_option< Side >::value,
             cblas_option< UpLo >::value, m, n, alpha, a, lda, b, ldb, beta, c,
             ldc );
@@ -90,10 +92,11 @@
 // * CBLAS backend, and
 // * complex<float> value-type.
 //
-template< typename Order, typename UpLo >
-inline void symm( Order, const char side, UpLo, const int m, const int n,
-        const std::complex<float> alpha, const std::complex<float>* a,
-        const int lda, const std::complex<float>* b, const int ldb,
+template< typename Order, typename Side, typename UpLo >
+inline void symm( const Order order, const Side side, const UpLo uplo,
+        const int m, const int n, const std::complex<float> alpha,
+        const std::complex<float>* a, const int lda,
+        const std::complex<float>* b, const int ldb,
         const std::complex<float> beta, std::complex<float>* c,
         const int ldc ) {
     cblas_csymm( cblas_option< Order >::value, cblas_option< Side >::value,
@@ -106,10 +109,11 @@
 // * CBLAS backend, and
 // * complex<double> value-type.
 //
-template< typename Order, typename UpLo >
-inline void symm( Order, const char side, UpLo, const int m, const int n,
-        const std::complex<double> alpha, const std::complex<double>* a,
-        const int lda, const std::complex<double>* b, const int ldb,
+template< typename Order, typename Side, typename UpLo >
+inline void symm( const Order order, const Side side, const UpLo uplo,
+        const int m, const int n, const std::complex<double> alpha,
+        const std::complex<double>* a, const int lda,
+        const std::complex<double>* b, const int ldb,
         const std::complex<double> beta, std::complex<double>* c,
         const int ldc ) {
     cblas_zsymm( cblas_option< Order >::value, cblas_option< Side >::value,
@@ -123,13 +127,14 @@
 // * CUBLAS backend, and
 // * float value-type.
 //
-template< typename Order, typename UpLo >
-inline void symm( Order, const char side, UpLo, const int m, const int n,
-        const float alpha, const float* a, const int lda, const float* b,
-        const int ldb, const float beta, float* c, const int ldc ) {
+template< typename Order, typename Side, typename UpLo >
+inline void symm( const Order order, const Side side, const UpLo uplo,
+        const int m, const int n, const float alpha, const float* a,
+        const int lda, const float* b, const int ldb, const float beta,
+        float* c, const int ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
-    cublasSsymm( side, blas_option< UpLo >::value, m, n, alpha, a, lda, b,
-            ldb, beta, c, ldc );
+    cublasSsymm( blas_option< Side >::value, blas_option< UpLo >::value, m, n,
+            alpha, a, lda, b, ldb, beta, c, ldc );
 }
 
 //
@@ -137,13 +142,14 @@
 // * CUBLAS backend, and
 // * double value-type.
 //
-template< typename Order, typename UpLo >
-inline void symm( Order, const char side, UpLo, const int m, const int n,
-        const double alpha, const double* a, const int lda, const double* b,
-        const int ldb, const double beta, double* c, const int ldc ) {
+template< typename Order, typename Side, typename UpLo >
+inline void symm( const Order order, const Side side, const UpLo uplo,
+        const int m, const int n, const double alpha, const double* a,
+        const int lda, const double* b, const int ldb, const double beta,
+        double* c, const int ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
-    cublasDsymm( side, blas_option< UpLo >::value, m, n, alpha, a, lda, b,
-            ldb, beta, c, ldc );
+    cublasDsymm( blas_option< Side >::value, blas_option< UpLo >::value, m, n,
+            alpha, a, lda, b, ldb, beta, c, ldc );
 }
 
 //
@@ -151,15 +157,16 @@
 // * CUBLAS backend, and
 // * complex<float> value-type.
 //
-template< typename Order, typename UpLo >
-inline void symm( Order, const char side, UpLo, const int m, const int n,
-        const std::complex<float> alpha, const std::complex<float>* a,
-        const int lda, const std::complex<float>* b, const int ldb,
+template< typename Order, typename Side, typename UpLo >
+inline void symm( const Order order, const Side side, const UpLo uplo,
+        const int m, const int n, const std::complex<float> alpha,
+        const std::complex<float>* a, const int lda,
+        const std::complex<float>* b, const int ldb,
         const std::complex<float> beta, std::complex<float>* c,
         const int ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
-    cublasCsymm( side, blas_option< UpLo >::value, m, n, alpha, a, lda, b,
-            ldb, beta, c, ldc );
+    cublasCsymm( blas_option< Side >::value, blas_option< UpLo >::value, m, n,
+            alpha, a, lda, b, ldb, beta, c, ldc );
 }
 
 //
@@ -167,10 +174,11 @@
 // * CUBLAS backend, and
 // * complex<double> value-type.
 //
-template< typename Order, typename UpLo >
-inline void symm( Order, const char side, UpLo, const int m, const int n,
-        const std::complex<double> alpha, const std::complex<double>* a,
-        const int lda, const std::complex<double>* b, const int ldb,
+template< typename Order, typename Side, typename UpLo >
+inline void symm( const Order order, const Side side, const UpLo uplo,
+        const int m, const int n, const std::complex<double> alpha,
+        const std::complex<double>* a, const int lda,
+        const std::complex<double>* b, const int ldb,
         const std::complex<double> beta, std::complex<double>* c,
         const int ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
@@ -183,14 +191,15 @@
 // * netlib-compatible BLAS backend (the default), and
 // * float value-type.
 //
-template< typename Order, typename UpLo >
-inline void symm( Order, const char side, UpLo, const fortran_int_t m,
-        const fortran_int_t n, const float alpha, const float* a,
-        const fortran_int_t lda, const float* b, const fortran_int_t ldb,
-        const float beta, float* c, const fortran_int_t ldc ) {
+template< typename Order, typename Side, typename UpLo >
+inline void symm( const Order order, const Side side, const UpLo uplo,
+        const fortran_int_t m, const fortran_int_t n, const float alpha,
+        const float* a, const fortran_int_t lda, const float* b,
+        const fortran_int_t ldb, const float beta, float* c,
+        const fortran_int_t ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
-    BLAS_SSYMM( &side, &blas_option< UpLo >::value, &m, &n, &alpha, a, &lda,
-            b, &ldb, &beta, c, &ldc );
+    BLAS_SSYMM( &blas_option< Side >::value, &blas_option< UpLo >::value, &m,
+            &n, &alpha, a, &lda, b, &ldb, &beta, c, &ldc );
 }
 
 //
@@ -198,14 +207,15 @@
 // * netlib-compatible BLAS backend (the default), and
 // * double value-type.
 //
-template< typename Order, typename UpLo >
-inline void symm( Order, const char side, UpLo, const fortran_int_t m,
-        const fortran_int_t n, const double alpha, const double* a,
-        const fortran_int_t lda, const double* b, const fortran_int_t ldb,
-        const double beta, double* c, const fortran_int_t ldc ) {
+template< typename Order, typename Side, typename UpLo >
+inline void symm( const Order order, const Side side, const UpLo uplo,
+        const fortran_int_t m, const fortran_int_t n, const double alpha,
+        const double* a, const fortran_int_t lda, const double* b,
+        const fortran_int_t ldb, const double beta, double* c,
+        const fortran_int_t ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
-    BLAS_DSYMM( &side, &blas_option< UpLo >::value, &m, &n, &alpha, a, &lda,
-            b, &ldb, &beta, c, &ldc );
+    BLAS_DSYMM( &blas_option< Side >::value, &blas_option< UpLo >::value, &m,
+            &n, &alpha, a, &lda, b, &ldb, &beta, c, &ldc );
 }
 
 //
@@ -213,16 +223,16 @@
 // * netlib-compatible BLAS backend (the default), and
 // * complex<float> value-type.
 //
-template< typename Order, typename UpLo >
-inline void symm( Order, const char side, UpLo, const fortran_int_t m,
-        const fortran_int_t n, const std::complex<float> alpha,
-        const std::complex<float>* a, const fortran_int_t lda,
-        const std::complex<float>* b, const fortran_int_t ldb,
-        const std::complex<float> beta, std::complex<float>* c,
-        const fortran_int_t ldc ) {
+template< typename Order, typename Side, typename UpLo >
+inline void symm( const Order order, const Side side, const UpLo uplo,
+        const fortran_int_t m, const fortran_int_t n,
+        const std::complex<float> alpha, const std::complex<float>* a,
+        const fortran_int_t lda, const std::complex<float>* b,
+        const fortran_int_t ldb, const std::complex<float> beta,
+        std::complex<float>* c, const fortran_int_t ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
-    BLAS_CSYMM( &side, &blas_option< UpLo >::value, &m, &n, &alpha, a, &lda,
-            b, &ldb, &beta, c, &ldc );
+    BLAS_CSYMM( &blas_option< Side >::value, &blas_option< UpLo >::value, &m,
+            &n, &alpha, a, &lda, b, &ldb, &beta, c, &ldc );
 }
 
 //
@@ -230,16 +240,16 @@
 // * netlib-compatible BLAS backend (the default), and
 // * complex<double> value-type.
 //
-template< typename Order, typename UpLo >
-inline void symm( Order, const char side, UpLo, const fortran_int_t m,
-        const fortran_int_t n, const std::complex<double> alpha,
-        const std::complex<double>* a, const fortran_int_t lda,
-        const std::complex<double>* b, const fortran_int_t ldb,
-        const std::complex<double> beta, std::complex<double>* c,
-        const fortran_int_t ldc ) {
+template< typename Order, typename Side, typename UpLo >
+inline void symm( const Order order, const Side side, const UpLo uplo,
+        const fortran_int_t m, const fortran_int_t n,
+        const std::complex<double> alpha, const std::complex<double>* a,
+        const fortran_int_t lda, const std::complex<double>* b,
+        const fortran_int_t ldb, const std::complex<double> beta,
+        std::complex<double>* c, const fortran_int_t ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
-    BLAS_ZSYMM( &side, &blas_option< UpLo >::value, &m, &n, &alpha, a, &lda,
-            b, &ldb, &beta, c, &ldc );
+    BLAS_ZSYMM( &blas_option< Side >::value, &blas_option< UpLo >::value, &m,
+            &n, &alpha, a, &lda, b, &ldb, &beta, c, &ldc );
 }
 
 #endif
@@ -262,8 +272,9 @@
     // * Deduces the required arguments for dispatching to BLAS, and
     // * Asserts that most arguments make sense.
     //
-    template< typename MatrixA, typename MatrixB, typename MatrixC >
-    static return_type invoke( const char side, const value_type alpha,
+    template< typename Side, typename MatrixA, typename MatrixB,
+            typename MatrixC >
+    static return_type invoke( const Side side, const value_type alpha,
             const MatrixA& a, const MatrixB& b, const value_type beta,
             MatrixC& c ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -284,7 +295,6 @@
                 bindings::stride_minor(b) == 1 );
         BOOST_ASSERT( bindings::size_minor(c) == 1 ||
                 bindings::stride_minor(c) == 1 );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         detail::symm( order(), side, uplo(), bindings::size_row(c),
                 bindings::size_column(c), alpha, bindings::begin_value(a),
                 bindings::stride_major(a), bindings::begin_value(b),
@@ -305,10 +315,10 @@
 // Overloaded function for symm. Its overload differs for
 // * MatrixC&
 //
-template< typename MatrixA, typename MatrixB, typename MatrixC >
+template< typename Side, typename MatrixA, typename MatrixB, typename MatrixC >
 inline typename symm_impl< typename bindings::value_type<
         MatrixA >::type >::return_type
-symm( const char side, const typename bindings::value_type<
+symm( const Side side, const typename bindings::value_type<
         MatrixA >::type alpha, const MatrixA& a, const MatrixB& b,
         const typename bindings::value_type< MatrixA >::type beta,
         MatrixC& c ) {
@@ -320,10 +330,10 @@
 // Overloaded function for symm. Its overload differs for
 // * const MatrixC&
 //
-template< typename MatrixA, typename MatrixB, typename MatrixC >
+template< typename Side, typename MatrixA, typename MatrixB, typename MatrixC >
 inline typename symm_impl< typename bindings::value_type<
         MatrixA >::type >::return_type
-symm( const char side, const typename bindings::value_type<
+symm( const Side side, const typename bindings::value_type<
         MatrixA >::type alpha, const MatrixA& a, const MatrixB& b,
         const typename bindings::value_type< MatrixA >::type beta,
         const MatrixC& c ) {
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syr2k.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syr2k.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syr2k.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -64,9 +64,10 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void syr2k( Order, UpLo, Trans, const int n, const int k,
-        const float alpha, const float* a, const int lda, const float* b,
-        const int ldb, const float beta, float* c, const int ldc ) {
+inline void syr2k( const Order order, const UpLo uplo, const Trans trans,
+        const int n, const int k, const float alpha, const float* a,
+        const int lda, const float* b, const int ldb, const float beta,
+        float* c, const int ldc ) {
     cblas_ssyr2k( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, n, k, alpha, a, lda, b, ldb, beta,
             c, ldc );
@@ -78,9 +79,10 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void syr2k( Order, UpLo, Trans, const int n, const int k,
-        const double alpha, const double* a, const int lda, const double* b,
-        const int ldb, const double beta, double* c, const int ldc ) {
+inline void syr2k( const Order order, const UpLo uplo, const Trans trans,
+        const int n, const int k, const double alpha, const double* a,
+        const int lda, const double* b, const int ldb, const double beta,
+        double* c, const int ldc ) {
     cblas_dsyr2k( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, n, k, alpha, a, lda, b, ldb, beta,
             c, ldc );
@@ -92,9 +94,10 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void syr2k( Order, UpLo, Trans, const int n, const int k,
-        const std::complex<float> alpha, const std::complex<float>* a,
-        const int lda, const std::complex<float>* b, const int ldb,
+inline void syr2k( const Order order, const UpLo uplo, const Trans trans,
+        const int n, const int k, const std::complex<float> alpha,
+        const std::complex<float>* a, const int lda,
+        const std::complex<float>* b, const int ldb,
         const std::complex<float> beta, std::complex<float>* c,
         const int ldc ) {
     cblas_csyr2k( cblas_option< Order >::value, cblas_option< UpLo >::value,
@@ -108,9 +111,10 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void syr2k( Order, UpLo, Trans, const int n, const int k,
-        const std::complex<double> alpha, const std::complex<double>* a,
-        const int lda, const std::complex<double>* b, const int ldb,
+inline void syr2k( const Order order, const UpLo uplo, const Trans trans,
+        const int n, const int k, const std::complex<double> alpha,
+        const std::complex<double>* a, const int lda,
+        const std::complex<double>* b, const int ldb,
         const std::complex<double> beta, std::complex<double>* c,
         const int ldc ) {
     cblas_zsyr2k( cblas_option< Order >::value, cblas_option< UpLo >::value,
@@ -125,9 +129,10 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void syr2k( Order, UpLo, Trans, const int n, const int k,
-        const float alpha, const float* a, const int lda, const float* b,
-        const int ldb, const float beta, float* c, const int ldc ) {
+inline void syr2k( const Order order, const UpLo uplo, const Trans trans,
+        const int n, const int k, const float alpha, const float* a,
+        const int lda, const float* b, const int ldb, const float beta,
+        float* c, const int ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasSsyr2k( blas_option< UpLo >::value, blas_option< Trans >::value, n,
             k, alpha, a, lda, b, ldb, beta, c, ldc );
@@ -139,9 +144,10 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void syr2k( Order, UpLo, Trans, const int n, const int k,
-        const double alpha, const double* a, const int lda, const double* b,
-        const int ldb, const double beta, double* c, const int ldc ) {
+inline void syr2k( const Order order, const UpLo uplo, const Trans trans,
+        const int n, const int k, const double alpha, const double* a,
+        const int lda, const double* b, const int ldb, const double beta,
+        double* c, const int ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasDsyr2k( blas_option< UpLo >::value, blas_option< Trans >::value, n,
             k, alpha, a, lda, b, ldb, beta, c, ldc );
@@ -153,9 +159,10 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void syr2k( Order, UpLo, Trans, const int n, const int k,
-        const std::complex<float> alpha, const std::complex<float>* a,
-        const int lda, const std::complex<float>* b, const int ldb,
+inline void syr2k( const Order order, const UpLo uplo, const Trans trans,
+        const int n, const int k, const std::complex<float> alpha,
+        const std::complex<float>* a, const int lda,
+        const std::complex<float>* b, const int ldb,
         const std::complex<float> beta, std::complex<float>* c,
         const int ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
@@ -169,9 +176,10 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void syr2k( Order, UpLo, Trans, const int n, const int k,
-        const std::complex<double> alpha, const std::complex<double>* a,
-        const int lda, const std::complex<double>* b, const int ldb,
+inline void syr2k( const Order order, const UpLo uplo, const Trans trans,
+        const int n, const int k, const std::complex<double> alpha,
+        const std::complex<double>* a, const int lda,
+        const std::complex<double>* b, const int ldb,
         const std::complex<double> beta, std::complex<double>* c,
         const int ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
@@ -185,10 +193,11 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void syr2k( Order, UpLo, Trans, const fortran_int_t n,
-        const fortran_int_t k, const float alpha, const float* a,
-        const fortran_int_t lda, const float* b, const fortran_int_t ldb,
-        const float beta, float* c, const fortran_int_t ldc ) {
+inline void syr2k( const Order order, const UpLo uplo, const Trans trans,
+        const fortran_int_t n, const fortran_int_t k, const float alpha,
+        const float* a, const fortran_int_t lda, const float* b,
+        const fortran_int_t ldb, const float beta, float* c,
+        const fortran_int_t ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_SSYR2K( &blas_option< UpLo >::value, &blas_option< Trans >::value,
             &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc );
@@ -200,10 +209,11 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void syr2k( Order, UpLo, Trans, const fortran_int_t n,
-        const fortran_int_t k, const double alpha, const double* a,
-        const fortran_int_t lda, const double* b, const fortran_int_t ldb,
-        const double beta, double* c, const fortran_int_t ldc ) {
+inline void syr2k( const Order order, const UpLo uplo, const Trans trans,
+        const fortran_int_t n, const fortran_int_t k, const double alpha,
+        const double* a, const fortran_int_t lda, const double* b,
+        const fortran_int_t ldb, const double beta, double* c,
+        const fortran_int_t ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_DSYR2K( &blas_option< UpLo >::value, &blas_option< Trans >::value,
             &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc );
@@ -215,12 +225,12 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void syr2k( Order, UpLo, Trans, const fortran_int_t n,
-        const fortran_int_t k, const std::complex<float> alpha,
-        const std::complex<float>* a, const fortran_int_t lda,
-        const std::complex<float>* b, const fortran_int_t ldb,
-        const std::complex<float> beta, std::complex<float>* c,
-        const fortran_int_t ldc ) {
+inline void syr2k( const Order order, const UpLo uplo, const Trans trans,
+        const fortran_int_t n, const fortran_int_t k,
+        const std::complex<float> alpha, const std::complex<float>* a,
+        const fortran_int_t lda, const std::complex<float>* b,
+        const fortran_int_t ldb, const std::complex<float> beta,
+        std::complex<float>* c, const fortran_int_t ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_CSYR2K( &blas_option< UpLo >::value, &blas_option< Trans >::value,
             &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc );
@@ -232,12 +242,12 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void syr2k( Order, UpLo, Trans, const fortran_int_t n,
-        const fortran_int_t k, const std::complex<double> alpha,
-        const std::complex<double>* a, const fortran_int_t lda,
-        const std::complex<double>* b, const fortran_int_t ldb,
-        const std::complex<double> beta, std::complex<double>* c,
-        const fortran_int_t ldc ) {
+inline void syr2k( const Order order, const UpLo uplo, const Trans trans,
+        const fortran_int_t n, const fortran_int_t k,
+        const std::complex<double> alpha, const std::complex<double>* a,
+        const fortran_int_t lda, const std::complex<double>* b,
+        const fortran_int_t ldb, const std::complex<double> beta,
+        std::complex<double>* c, const fortran_int_t ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_ZSYR2K( &blas_option< UpLo >::value, &blas_option< Trans >::value,
             &n, &k, &alpha, a, &lda, b, &ldb, &beta, c, &ldc );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syrk.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syrk.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/syrk.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -64,9 +64,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void syrk( Order, UpLo, Trans, const int n, const int k,
-        const float alpha, const float* a, const int lda, const float beta,
-        float* c, const int ldc ) {
+inline void syrk( const Order order, const UpLo uplo, const Trans trans,
+        const int n, const int k, const float alpha, const float* a,
+        const int lda, const float beta, float* c, const int ldc ) {
     cblas_ssyrk( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, n, k, alpha, a, lda, beta, c, ldc );
 }
@@ -77,9 +77,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void syrk( Order, UpLo, Trans, const int n, const int k,
-        const double alpha, const double* a, const int lda, const double beta,
-        double* c, const int ldc ) {
+inline void syrk( const Order order, const UpLo uplo, const Trans trans,
+        const int n, const int k, const double alpha, const double* a,
+        const int lda, const double beta, double* c, const int ldc ) {
     cblas_dsyrk( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, n, k, alpha, a, lda, beta, c, ldc );
 }
@@ -90,9 +90,10 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void syrk( Order, UpLo, Trans, const int n, const int k,
-        const std::complex<float> alpha, const std::complex<float>* a,
-        const int lda, const std::complex<float> beta, std::complex<float>* c,
+inline void syrk( const Order order, const UpLo uplo, const Trans trans,
+        const int n, const int k, const std::complex<float> alpha,
+        const std::complex<float>* a, const int lda,
+        const std::complex<float> beta, std::complex<float>* c,
         const int ldc ) {
     cblas_csyrk( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, n, k, &alpha, a, lda, &beta, c,
@@ -105,10 +106,11 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void syrk( Order, UpLo, Trans, const int n, const int k,
-        const std::complex<double> alpha, const std::complex<double>* a,
-        const int lda, const std::complex<double> beta,
-        std::complex<double>* c, const int ldc ) {
+inline void syrk( const Order order, const UpLo uplo, const Trans trans,
+        const int n, const int k, const std::complex<double> alpha,
+        const std::complex<double>* a, const int lda,
+        const std::complex<double> beta, std::complex<double>* c,
+        const int ldc ) {
     cblas_zsyrk( cblas_option< Order >::value, cblas_option< UpLo >::value,
             cblas_option< Trans >::value, n, k, &alpha, a, lda, &beta, c,
             ldc );
@@ -121,9 +123,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void syrk( Order, UpLo, Trans, const int n, const int k,
-        const float alpha, const float* a, const int lda, const float beta,
-        float* c, const int ldc ) {
+inline void syrk( const Order order, const UpLo uplo, const Trans trans,
+        const int n, const int k, const float alpha, const float* a,
+        const int lda, const float beta, float* c, const int ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasSsyrk( blas_option< UpLo >::value, blas_option< Trans >::value, n,
             k, alpha, a, lda, beta, c, ldc );
@@ -135,9 +137,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void syrk( Order, UpLo, Trans, const int n, const int k,
-        const double alpha, const double* a, const int lda, const double beta,
-        double* c, const int ldc ) {
+inline void syrk( const Order order, const UpLo uplo, const Trans trans,
+        const int n, const int k, const double alpha, const double* a,
+        const int lda, const double beta, double* c, const int ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasDsyrk( blas_option< UpLo >::value, blas_option< Trans >::value, n,
             k, alpha, a, lda, beta, c, ldc );
@@ -149,9 +151,10 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void syrk( Order, UpLo, Trans, const int n, const int k,
-        const std::complex<float> alpha, const std::complex<float>* a,
-        const int lda, const std::complex<float> beta, std::complex<float>* c,
+inline void syrk( const Order order, const UpLo uplo, const Trans trans,
+        const int n, const int k, const std::complex<float> alpha,
+        const std::complex<float>* a, const int lda,
+        const std::complex<float> beta, std::complex<float>* c,
         const int ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasCsyrk( blas_option< UpLo >::value, blas_option< Trans >::value, n,
@@ -164,10 +167,11 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void syrk( Order, UpLo, Trans, const int n, const int k,
-        const std::complex<double> alpha, const std::complex<double>* a,
-        const int lda, const std::complex<double> beta,
-        std::complex<double>* c, const int ldc ) {
+inline void syrk( const Order order, const UpLo uplo, const Trans trans,
+        const int n, const int k, const std::complex<double> alpha,
+        const std::complex<double>* a, const int lda,
+        const std::complex<double> beta, std::complex<double>* c,
+        const int ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     cublasZsyrk( blas_option< UpLo >::value, blas_option< Trans >::value, n,
             k, alpha, a, lda, beta, c, ldc );
@@ -180,9 +184,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void syrk( Order, UpLo, Trans, const fortran_int_t n,
-        const fortran_int_t k, const float alpha, const float* a,
-        const fortran_int_t lda, const float beta, float* c,
+inline void syrk( const Order order, const UpLo uplo, const Trans trans,
+        const fortran_int_t n, const fortran_int_t k, const float alpha,
+        const float* a, const fortran_int_t lda, const float beta, float* c,
         const fortran_int_t ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_SSYRK( &blas_option< UpLo >::value, &blas_option< Trans >::value, &n,
@@ -195,10 +199,10 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void syrk( Order, UpLo, Trans, const fortran_int_t n,
-        const fortran_int_t k, const double alpha, const double* a,
-        const fortran_int_t lda, const double beta, double* c,
-        const fortran_int_t ldc ) {
+inline void syrk( const Order order, const UpLo uplo, const Trans trans,
+        const fortran_int_t n, const fortran_int_t k, const double alpha,
+        const double* a, const fortran_int_t lda, const double beta,
+        double* c, const fortran_int_t ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_DSYRK( &blas_option< UpLo >::value, &blas_option< Trans >::value, &n,
             &k, &alpha, a, &lda, &beta, c, &ldc );
@@ -210,11 +214,11 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void syrk( Order, UpLo, Trans, const fortran_int_t n,
-        const fortran_int_t k, const std::complex<float> alpha,
-        const std::complex<float>* a, const fortran_int_t lda,
-        const std::complex<float> beta, std::complex<float>* c,
-        const fortran_int_t ldc ) {
+inline void syrk( const Order order, const UpLo uplo, const Trans trans,
+        const fortran_int_t n, const fortran_int_t k,
+        const std::complex<float> alpha, const std::complex<float>* a,
+        const fortran_int_t lda, const std::complex<float> beta,
+        std::complex<float>* c, const fortran_int_t ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_CSYRK( &blas_option< UpLo >::value, &blas_option< Trans >::value, &n,
             &k, &alpha, a, &lda, &beta, c, &ldc );
@@ -226,11 +230,11 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Trans >
-inline void syrk( Order, UpLo, Trans, const fortran_int_t n,
-        const fortran_int_t k, const std::complex<double> alpha,
-        const std::complex<double>* a, const fortran_int_t lda,
-        const std::complex<double> beta, std::complex<double>* c,
-        const fortran_int_t ldc ) {
+inline void syrk( const Order order, const UpLo uplo, const Trans trans,
+        const fortran_int_t n, const fortran_int_t k,
+        const std::complex<double> alpha, const std::complex<double>* a,
+        const fortran_int_t lda, const std::complex<double> beta,
+        std::complex<double>* c, const fortran_int_t ldc ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     BLAS_ZSYRK( &blas_option< UpLo >::value, &blas_option< Trans >::value, &n,
             &k, &alpha, a, &lda, &beta, c, &ldc );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trmm.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trmm.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trmm.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -64,10 +64,12 @@
 // * CBLAS backend, and
 // * float value-type.
 //
-template< typename Order, typename UpLo, typename TransA, typename Diag >
-inline void trmm( Order, const char side, UpLo, TransA, Diag, const int m,
-        const int n, const float alpha, const float* a, const int lda,
-        float* b, const int ldb ) {
+template< typename Order, typename Side, typename UpLo, typename TransA,
+        typename Diag >
+inline void trmm( const Order order, const Side side, const UpLo uplo,
+        const TransA transa, const Diag diag, const int m, const int n,
+        const float alpha, const float* a, const int lda, float* b,
+        const int ldb ) {
     cblas_strmm( cblas_option< Order >::value, cblas_option< Side >::value,
             cblas_option< UpLo >::value, cblas_option< TransA >::value,
             cblas_option< Diag >::value, m, n, alpha, a, lda, b, ldb );
@@ -78,10 +80,12 @@
 // * CBLAS backend, and
 // * double value-type.
 //
-template< typename Order, typename UpLo, typename TransA, typename Diag >
-inline void trmm( Order, const char side, UpLo, TransA, Diag, const int m,
-        const int n, const double alpha, const double* a, const int lda,
-        double* b, const int ldb ) {
+template< typename Order, typename Side, typename UpLo, typename TransA,
+        typename Diag >
+inline void trmm( const Order order, const Side side, const UpLo uplo,
+        const TransA transa, const Diag diag, const int m, const int n,
+        const double alpha, const double* a, const int lda, double* b,
+        const int ldb ) {
     cblas_dtrmm( cblas_option< Order >::value, cblas_option< Side >::value,
             cblas_option< UpLo >::value, cblas_option< TransA >::value,
             cblas_option< Diag >::value, m, n, alpha, a, lda, b, ldb );
@@ -92,11 +96,12 @@
 // * CBLAS backend, and
 // * complex<float> value-type.
 //
-template< typename Order, typename UpLo, typename TransA, typename Diag >
-inline void trmm( Order, const char side, UpLo, TransA, Diag, const int m,
-        const int n, const std::complex<float> alpha,
-        const std::complex<float>* a, const int lda, std::complex<float>* b,
-        const int ldb ) {
+template< typename Order, typename Side, typename UpLo, typename TransA,
+        typename Diag >
+inline void trmm( const Order order, const Side side, const UpLo uplo,
+        const TransA transa, const Diag diag, const int m, const int n,
+        const std::complex<float> alpha, const std::complex<float>* a,
+        const int lda, std::complex<float>* b, const int ldb ) {
     cblas_ctrmm( cblas_option< Order >::value, cblas_option< Side >::value,
             cblas_option< UpLo >::value, cblas_option< TransA >::value,
             cblas_option< Diag >::value, m, n, &alpha, a, lda, b, ldb );
@@ -107,11 +112,12 @@
 // * CBLAS backend, and
 // * complex<double> value-type.
 //
-template< typename Order, typename UpLo, typename TransA, typename Diag >
-inline void trmm( Order, const char side, UpLo, TransA, Diag, const int m,
-        const int n, const std::complex<double> alpha,
-        const std::complex<double>* a, const int lda, std::complex<double>* b,
-        const int ldb ) {
+template< typename Order, typename Side, typename UpLo, typename TransA,
+        typename Diag >
+inline void trmm( const Order order, const Side side, const UpLo uplo,
+        const TransA transa, const Diag diag, const int m, const int n,
+        const std::complex<double> alpha, const std::complex<double>* a,
+        const int lda, std::complex<double>* b, const int ldb ) {
     cblas_ztrmm( cblas_option< Order >::value, cblas_option< Side >::value,
             cblas_option< UpLo >::value, cblas_option< TransA >::value,
             cblas_option< Diag >::value, m, n, &alpha, a, lda, b, ldb );
@@ -123,14 +129,16 @@
 // * CUBLAS backend, and
 // * float value-type.
 //
-template< typename Order, typename UpLo, typename TransA, typename Diag >
-inline void trmm( Order, const char side, UpLo, TransA, Diag, const int m,
-        const int n, const float alpha, const float* a, const int lda,
-        float* b, const int ldb ) {
+template< typename Order, typename Side, typename UpLo, typename TransA,
+        typename Diag >
+inline void trmm( const Order order, const Side side, const UpLo uplo,
+        const TransA transa, const Diag diag, const int m, const int n,
+        const float alpha, const float* a, const int lda, float* b,
+        const int ldb ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
-    cublasStrmm( side, blas_option< UpLo >::value, blas_option<
-            TransA >::value, blas_option< Diag >::value, m, n, alpha, a, lda,
-            b, ldb );
+    cublasStrmm( blas_option< Side >::value, blas_option< UpLo >::value,
+            blas_option< TransA >::value, blas_option< Diag >::value, m, n,
+            alpha, a, lda, b, ldb );
 }
 
 //
@@ -138,14 +146,16 @@
 // * CUBLAS backend, and
 // * double value-type.
 //
-template< typename Order, typename UpLo, typename TransA, typename Diag >
-inline void trmm( Order, const char side, UpLo, TransA, Diag, const int m,
-        const int n, const double alpha, const double* a, const int lda,
-        double* b, const int ldb ) {
+template< typename Order, typename Side, typename UpLo, typename TransA,
+        typename Diag >
+inline void trmm( const Order order, const Side side, const UpLo uplo,
+        const TransA transa, const Diag diag, const int m, const int n,
+        const double alpha, const double* a, const int lda, double* b,
+        const int ldb ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
-    cublasDtrmm( side, blas_option< UpLo >::value, blas_option<
-            TransA >::value, blas_option< Diag >::value, m, n, alpha, a, lda,
-            b, ldb );
+    cublasDtrmm( blas_option< Side >::value, blas_option< UpLo >::value,
+            blas_option< TransA >::value, blas_option< Diag >::value, m, n,
+            alpha, a, lda, b, ldb );
 }
 
 //
@@ -153,15 +163,16 @@
 // * CUBLAS backend, and
 // * complex<float> value-type.
 //
-template< typename Order, typename UpLo, typename TransA, typename Diag >
-inline void trmm( Order, const char side, UpLo, TransA, Diag, const int m,
-        const int n, const std::complex<float> alpha,
-        const std::complex<float>* a, const int lda, std::complex<float>* b,
-        const int ldb ) {
+template< typename Order, typename Side, typename UpLo, typename TransA,
+        typename Diag >
+inline void trmm( const Order order, const Side side, const UpLo uplo,
+        const TransA transa, const Diag diag, const int m, const int n,
+        const std::complex<float> alpha, const std::complex<float>* a,
+        const int lda, std::complex<float>* b, const int ldb ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
-    cublasCtrmm( side, blas_option< UpLo >::value, blas_option<
-            TransA >::value, blas_option< Diag >::value, m, n, alpha, a, lda,
-            b, ldb );
+    cublasCtrmm( blas_option< Side >::value, blas_option< UpLo >::value,
+            blas_option< TransA >::value, blas_option< Diag >::value, m, n,
+            alpha, a, lda, b, ldb );
 }
 
 //
@@ -169,11 +180,12 @@
 // * CUBLAS backend, and
 // * complex<double> value-type.
 //
-template< typename Order, typename UpLo, typename TransA, typename Diag >
-inline void trmm( Order, const char side, UpLo, TransA, Diag, const int m,
-        const int n, const std::complex<double> alpha,
-        const std::complex<double>* a, const int lda, std::complex<double>* b,
-        const int ldb ) {
+template< typename Order, typename Side, typename UpLo, typename TransA,
+        typename Diag >
+inline void trmm( const Order order, const Side side, const UpLo uplo,
+        const TransA transa, const Diag diag, const int m, const int n,
+        const std::complex<double> alpha, const std::complex<double>* a,
+        const int lda, std::complex<double>* b, const int ldb ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     // NOT FOUND();
 }
@@ -184,15 +196,16 @@
 // * netlib-compatible BLAS backend (the default), and
 // * float value-type.
 //
-template< typename Order, typename UpLo, typename TransA, typename Diag >
-inline void trmm( Order, const char side, UpLo, TransA, Diag,
-        const fortran_int_t m, const fortran_int_t n, const float alpha,
-        const float* a, const fortran_int_t lda, float* b,
-        const fortran_int_t ldb ) {
+template< typename Order, typename Side, typename UpLo, typename TransA,
+        typename Diag >
+inline void trmm( const Order order, const Side side, const UpLo uplo,
+        const TransA transa, const Diag diag, const fortran_int_t m,
+        const fortran_int_t n, const float alpha, const float* a,
+        const fortran_int_t lda, float* b, const fortran_int_t ldb ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
-    BLAS_STRMM( &side, &blas_option< UpLo >::value, &blas_option<
-            TransA >::value, &blas_option< Diag >::value, &m, &n, &alpha, a,
-            &lda, b, &ldb );
+    BLAS_STRMM( &blas_option< Side >::value, &blas_option< UpLo >::value,
+            &blas_option< TransA >::value, &blas_option< Diag >::value, &m,
+            &n, &alpha, a, &lda, b, &ldb );
 }
 
 //
@@ -200,15 +213,16 @@
 // * netlib-compatible BLAS backend (the default), and
 // * double value-type.
 //
-template< typename Order, typename UpLo, typename TransA, typename Diag >
-inline void trmm( Order, const char side, UpLo, TransA, Diag,
-        const fortran_int_t m, const fortran_int_t n, const double alpha,
-        const double* a, const fortran_int_t lda, double* b,
-        const fortran_int_t ldb ) {
+template< typename Order, typename Side, typename UpLo, typename TransA,
+        typename Diag >
+inline void trmm( const Order order, const Side side, const UpLo uplo,
+        const TransA transa, const Diag diag, const fortran_int_t m,
+        const fortran_int_t n, const double alpha, const double* a,
+        const fortran_int_t lda, double* b, const fortran_int_t ldb ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
-    BLAS_DTRMM( &side, &blas_option< UpLo >::value, &blas_option<
-            TransA >::value, &blas_option< Diag >::value, &m, &n, &alpha, a,
-            &lda, b, &ldb );
+    BLAS_DTRMM( &blas_option< Side >::value, &blas_option< UpLo >::value,
+            &blas_option< TransA >::value, &blas_option< Diag >::value, &m,
+            &n, &alpha, a, &lda, b, &ldb );
 }
 
 //
@@ -216,16 +230,17 @@
 // * netlib-compatible BLAS backend (the default), and
 // * complex<float> value-type.
 //
-template< typename Order, typename UpLo, typename TransA, typename Diag >
-inline void trmm( Order, const char side, UpLo, TransA, Diag,
-        const fortran_int_t m, const fortran_int_t n,
-        const std::complex<float> alpha, const std::complex<float>* a,
-        const fortran_int_t lda, std::complex<float>* b,
-        const fortran_int_t ldb ) {
+template< typename Order, typename Side, typename UpLo, typename TransA,
+        typename Diag >
+inline void trmm( const Order order, const Side side, const UpLo uplo,
+        const TransA transa, const Diag diag, const fortran_int_t m,
+        const fortran_int_t n, const std::complex<float> alpha,
+        const std::complex<float>* a, const fortran_int_t lda,
+        std::complex<float>* b, const fortran_int_t ldb ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
-    BLAS_CTRMM( &side, &blas_option< UpLo >::value, &blas_option<
-            TransA >::value, &blas_option< Diag >::value, &m, &n, &alpha, a,
-            &lda, b, &ldb );
+    BLAS_CTRMM( &blas_option< Side >::value, &blas_option< UpLo >::value,
+            &blas_option< TransA >::value, &blas_option< Diag >::value, &m,
+            &n, &alpha, a, &lda, b, &ldb );
 }
 
 //
@@ -233,16 +248,17 @@
 // * netlib-compatible BLAS backend (the default), and
 // * complex<double> value-type.
 //
-template< typename Order, typename UpLo, typename TransA, typename Diag >
-inline void trmm( Order, const char side, UpLo, TransA, Diag,
-        const fortran_int_t m, const fortran_int_t n,
-        const std::complex<double> alpha, const std::complex<double>* a,
-        const fortran_int_t lda, std::complex<double>* b,
-        const fortran_int_t ldb ) {
+template< typename Order, typename Side, typename UpLo, typename TransA,
+        typename Diag >
+inline void trmm( const Order order, const Side side, const UpLo uplo,
+        const TransA transa, const Diag diag, const fortran_int_t m,
+        const fortran_int_t n, const std::complex<double> alpha,
+        const std::complex<double>* a, const fortran_int_t lda,
+        std::complex<double>* b, const fortran_int_t ldb ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
-    BLAS_ZTRMM( &side, &blas_option< UpLo >::value, &blas_option<
-            TransA >::value, &blas_option< Diag >::value, &m, &n, &alpha, a,
-            &lda, b, &ldb );
+    BLAS_ZTRMM( &blas_option< Side >::value, &blas_option< UpLo >::value,
+            &blas_option< TransA >::value, &blas_option< Diag >::value, &m,
+            &n, &alpha, a, &lda, b, &ldb );
 }
 
 #endif
@@ -265,13 +281,13 @@
     // * Deduces the required arguments for dispatching to BLAS, and
     // * Asserts that most arguments make sense.
     //
-    template< typename MatrixA, typename MatrixB >
-    static return_type invoke( const char side, const value_type alpha,
+    template< typename Side, typename MatrixA, typename MatrixB >
+    static return_type invoke( const Side side, const value_type alpha,
             const MatrixA& a, MatrixB& b ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixB >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type transa;
-        typedef typename result_of::uplo_tag< MatrixA, trans >::type uplo;
+        typedef typename result_of::uplo_tag< MatrixA, transa >::type uplo;
         typedef typename result_of::diag_tag< MatrixA >::type diag;
         BOOST_STATIC_ASSERT( (is_same< typename remove_const<
                 typename bindings::value_type< MatrixA >::type >::type,
@@ -282,7 +298,6 @@
                 bindings::stride_minor(a) == 1 );
         BOOST_ASSERT( bindings::size_minor(b) == 1 ||
                 bindings::stride_minor(b) == 1 );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         detail::trmm( order(), side, uplo(), transa(), diag(),
                 bindings::size_row(b), bindings::size_column(b), alpha,
                 bindings::begin_value(a), bindings::stride_major(a),
@@ -302,10 +317,10 @@
 // Overloaded function for trmm. Its overload differs for
 // * MatrixB&
 //
-template< typename MatrixA, typename MatrixB >
+template< typename Side, typename MatrixA, typename MatrixB >
 inline typename trmm_impl< typename bindings::value_type<
         MatrixA >::type >::return_type
-trmm( const char side, const typename bindings::value_type<
+trmm( const Side side, const typename bindings::value_type<
         MatrixA >::type alpha, const MatrixA& a, MatrixB& b ) {
     trmm_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, alpha, a, b );
@@ -315,10 +330,10 @@
 // Overloaded function for trmm. Its overload differs for
 // * const MatrixB&
 //
-template< typename MatrixA, typename MatrixB >
+template< typename Side, typename MatrixA, typename MatrixB >
 inline typename trmm_impl< typename bindings::value_type<
         MatrixA >::type >::return_type
-trmm( const char side, const typename bindings::value_type<
+trmm( const Side side, const typename bindings::value_type<
         MatrixA >::type alpha, const MatrixA& a, const MatrixB& b ) {
     trmm_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, alpha, a, b );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trsm.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trsm.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/blas/level3/trsm.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -64,10 +64,12 @@
 // * CBLAS backend, and
 // * float value-type.
 //
-template< typename Order, typename UpLo, typename TransA, typename Diag >
-inline void trsm( Order, const char side, UpLo, TransA, Diag, const int m,
-        const int n, const float alpha, const float* a, const int lda,
-        float* b, const int ldb ) {
+template< typename Order, typename Side, typename UpLo, typename TransA,
+        typename Diag >
+inline void trsm( const Order order, const Side side, const UpLo uplo,
+        const TransA transa, const Diag diag, const int m, const int n,
+        const float alpha, const float* a, const int lda, float* b,
+        const int ldb ) {
     cblas_strsm( cblas_option< Order >::value, cblas_option< Side >::value,
             cblas_option< UpLo >::value, cblas_option< TransA >::value,
             cblas_option< Diag >::value, m, n, alpha, a, lda, b, ldb );
@@ -78,10 +80,12 @@
 // * CBLAS backend, and
 // * double value-type.
 //
-template< typename Order, typename UpLo, typename TransA, typename Diag >
-inline void trsm( Order, const char side, UpLo, TransA, Diag, const int m,
-        const int n, const double alpha, const double* a, const int lda,
-        double* b, const int ldb ) {
+template< typename Order, typename Side, typename UpLo, typename TransA,
+        typename Diag >
+inline void trsm( const Order order, const Side side, const UpLo uplo,
+        const TransA transa, const Diag diag, const int m, const int n,
+        const double alpha, const double* a, const int lda, double* b,
+        const int ldb ) {
     cblas_dtrsm( cblas_option< Order >::value, cblas_option< Side >::value,
             cblas_option< UpLo >::value, cblas_option< TransA >::value,
             cblas_option< Diag >::value, m, n, alpha, a, lda, b, ldb );
@@ -92,11 +96,12 @@
 // * CBLAS backend, and
 // * complex<float> value-type.
 //
-template< typename Order, typename UpLo, typename TransA, typename Diag >
-inline void trsm( Order, const char side, UpLo, TransA, Diag, const int m,
-        const int n, const std::complex<float> alpha,
-        const std::complex<float>* a, const int lda, std::complex<float>* b,
-        const int ldb ) {
+template< typename Order, typename Side, typename UpLo, typename TransA,
+        typename Diag >
+inline void trsm( const Order order, const Side side, const UpLo uplo,
+        const TransA transa, const Diag diag, const int m, const int n,
+        const std::complex<float> alpha, const std::complex<float>* a,
+        const int lda, std::complex<float>* b, const int ldb ) {
     cblas_ctrsm( cblas_option< Order >::value, cblas_option< Side >::value,
             cblas_option< UpLo >::value, cblas_option< TransA >::value,
             cblas_option< Diag >::value, m, n, &alpha, a, lda, b, ldb );
@@ -107,11 +112,12 @@
 // * CBLAS backend, and
 // * complex<double> value-type.
 //
-template< typename Order, typename UpLo, typename TransA, typename Diag >
-inline void trsm( Order, const char side, UpLo, TransA, Diag, const int m,
-        const int n, const std::complex<double> alpha,
-        const std::complex<double>* a, const int lda, std::complex<double>* b,
-        const int ldb ) {
+template< typename Order, typename Side, typename UpLo, typename TransA,
+        typename Diag >
+inline void trsm( const Order order, const Side side, const UpLo uplo,
+        const TransA transa, const Diag diag, const int m, const int n,
+        const std::complex<double> alpha, const std::complex<double>* a,
+        const int lda, std::complex<double>* b, const int ldb ) {
     cblas_ztrsm( cblas_option< Order >::value, cblas_option< Side >::value,
             cblas_option< UpLo >::value, cblas_option< TransA >::value,
             cblas_option< Diag >::value, m, n, &alpha, a, lda, b, ldb );
@@ -123,14 +129,16 @@
 // * CUBLAS backend, and
 // * float value-type.
 //
-template< typename Order, typename UpLo, typename TransA, typename Diag >
-inline void trsm( Order, const char side, UpLo, TransA, Diag, const int m,
-        const int n, const float alpha, const float* a, const int lda,
-        float* b, const int ldb ) {
+template< typename Order, typename Side, typename UpLo, typename TransA,
+        typename Diag >
+inline void trsm( const Order order, const Side side, const UpLo uplo,
+        const TransA transa, const Diag diag, const int m, const int n,
+        const float alpha, const float* a, const int lda, float* b,
+        const int ldb ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
-    cublasStrsm( side, blas_option< UpLo >::value, blas_option<
-            TransA >::value, blas_option< Diag >::value, m, n, alpha, a, lda,
-            b, ldb );
+    cublasStrsm( blas_option< Side >::value, blas_option< UpLo >::value,
+            blas_option< TransA >::value, blas_option< Diag >::value, m, n,
+            alpha, a, lda, b, ldb );
 }
 
 //
@@ -138,14 +146,16 @@
 // * CUBLAS backend, and
 // * double value-type.
 //
-template< typename Order, typename UpLo, typename TransA, typename Diag >
-inline void trsm( Order, const char side, UpLo, TransA, Diag, const int m,
-        const int n, const double alpha, const double* a, const int lda,
-        double* b, const int ldb ) {
+template< typename Order, typename Side, typename UpLo, typename TransA,
+        typename Diag >
+inline void trsm( const Order order, const Side side, const UpLo uplo,
+        const TransA transa, const Diag diag, const int m, const int n,
+        const double alpha, const double* a, const int lda, double* b,
+        const int ldb ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
-    cublasDtrsm( side, blas_option< UpLo >::value, blas_option<
-            TransA >::value, blas_option< Diag >::value, m, n, alpha, a, lda,
-            b, ldb );
+    cublasDtrsm( blas_option< Side >::value, blas_option< UpLo >::value,
+            blas_option< TransA >::value, blas_option< Diag >::value, m, n,
+            alpha, a, lda, b, ldb );
 }
 
 //
@@ -153,15 +163,16 @@
 // * CUBLAS backend, and
 // * complex<float> value-type.
 //
-template< typename Order, typename UpLo, typename TransA, typename Diag >
-inline void trsm( Order, const char side, UpLo, TransA, Diag, const int m,
-        const int n, const std::complex<float> alpha,
-        const std::complex<float>* a, const int lda, std::complex<float>* b,
-        const int ldb ) {
+template< typename Order, typename Side, typename UpLo, typename TransA,
+        typename Diag >
+inline void trsm( const Order order, const Side side, const UpLo uplo,
+        const TransA transa, const Diag diag, const int m, const int n,
+        const std::complex<float> alpha, const std::complex<float>* a,
+        const int lda, std::complex<float>* b, const int ldb ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
-    cublasCtrsm( side, blas_option< UpLo >::value, blas_option<
-            TransA >::value, blas_option< Diag >::value, m, n, alpha, a, lda,
-            b, ldb );
+    cublasCtrsm( blas_option< Side >::value, blas_option< UpLo >::value,
+            blas_option< TransA >::value, blas_option< Diag >::value, m, n,
+            alpha, a, lda, b, ldb );
 }
 
 //
@@ -169,15 +180,16 @@
 // * CUBLAS backend, and
 // * complex<double> value-type.
 //
-template< typename Order, typename UpLo, typename TransA, typename Diag >
-inline void trsm( Order, const char side, UpLo, TransA, Diag, const int m,
-        const int n, const std::complex<double> alpha,
-        const std::complex<double>* a, const int lda, std::complex<double>* b,
-        const int ldb ) {
+template< typename Order, typename Side, typename UpLo, typename TransA,
+        typename Diag >
+inline void trsm( const Order order, const Side side, const UpLo uplo,
+        const TransA transa, const Diag diag, const int m, const int n,
+        const std::complex<double> alpha, const std::complex<double>* a,
+        const int lda, std::complex<double>* b, const int ldb ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
-    cublasZtrsm( side, blas_option< UpLo >::value, blas_option<
-            TransA >::value, blas_option< Diag >::value, m, n, alpha, a, lda,
-            b, ldb );
+    cublasZtrsm( blas_option< Side >::value, blas_option< UpLo >::value,
+            blas_option< TransA >::value, blas_option< Diag >::value, m, n,
+            alpha, a, lda, b, ldb );
 }
 
 #else
@@ -186,15 +198,16 @@
 // * netlib-compatible BLAS backend (the default), and
 // * float value-type.
 //
-template< typename Order, typename UpLo, typename TransA, typename Diag >
-inline void trsm( Order, const char side, UpLo, TransA, Diag,
-        const fortran_int_t m, const fortran_int_t n, const float alpha,
-        const float* a, const fortran_int_t lda, float* b,
-        const fortran_int_t ldb ) {
+template< typename Order, typename Side, typename UpLo, typename TransA,
+        typename Diag >
+inline void trsm( const Order order, const Side side, const UpLo uplo,
+        const TransA transa, const Diag diag, const fortran_int_t m,
+        const fortran_int_t n, const float alpha, const float* a,
+        const fortran_int_t lda, float* b, const fortran_int_t ldb ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
-    BLAS_STRSM( &side, &blas_option< UpLo >::value, &blas_option<
-            TransA >::value, &blas_option< Diag >::value, &m, &n, &alpha, a,
-            &lda, b, &ldb );
+    BLAS_STRSM( &blas_option< Side >::value, &blas_option< UpLo >::value,
+            &blas_option< TransA >::value, &blas_option< Diag >::value, &m,
+            &n, &alpha, a, &lda, b, &ldb );
 }
 
 //
@@ -202,15 +215,16 @@
 // * netlib-compatible BLAS backend (the default), and
 // * double value-type.
 //
-template< typename Order, typename UpLo, typename TransA, typename Diag >
-inline void trsm( Order, const char side, UpLo, TransA, Diag,
-        const fortran_int_t m, const fortran_int_t n, const double alpha,
-        const double* a, const fortran_int_t lda, double* b,
-        const fortran_int_t ldb ) {
+template< typename Order, typename Side, typename UpLo, typename TransA,
+        typename Diag >
+inline void trsm( const Order order, const Side side, const UpLo uplo,
+        const TransA transa, const Diag diag, const fortran_int_t m,
+        const fortran_int_t n, const double alpha, const double* a,
+        const fortran_int_t lda, double* b, const fortran_int_t ldb ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
-    BLAS_DTRSM( &side, &blas_option< UpLo >::value, &blas_option<
-            TransA >::value, &blas_option< Diag >::value, &m, &n, &alpha, a,
-            &lda, b, &ldb );
+    BLAS_DTRSM( &blas_option< Side >::value, &blas_option< UpLo >::value,
+            &blas_option< TransA >::value, &blas_option< Diag >::value, &m,
+            &n, &alpha, a, &lda, b, &ldb );
 }
 
 //
@@ -218,16 +232,17 @@
 // * netlib-compatible BLAS backend (the default), and
 // * complex<float> value-type.
 //
-template< typename Order, typename UpLo, typename TransA, typename Diag >
-inline void trsm( Order, const char side, UpLo, TransA, Diag,
-        const fortran_int_t m, const fortran_int_t n,
-        const std::complex<float> alpha, const std::complex<float>* a,
-        const fortran_int_t lda, std::complex<float>* b,
-        const fortran_int_t ldb ) {
+template< typename Order, typename Side, typename UpLo, typename TransA,
+        typename Diag >
+inline void trsm( const Order order, const Side side, const UpLo uplo,
+        const TransA transa, const Diag diag, const fortran_int_t m,
+        const fortran_int_t n, const std::complex<float> alpha,
+        const std::complex<float>* a, const fortran_int_t lda,
+        std::complex<float>* b, const fortran_int_t ldb ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
-    BLAS_CTRSM( &side, &blas_option< UpLo >::value, &blas_option<
-            TransA >::value, &blas_option< Diag >::value, &m, &n, &alpha, a,
-            &lda, b, &ldb );
+    BLAS_CTRSM( &blas_option< Side >::value, &blas_option< UpLo >::value,
+            &blas_option< TransA >::value, &blas_option< Diag >::value, &m,
+            &n, &alpha, a, &lda, b, &ldb );
 }
 
 //
@@ -235,16 +250,17 @@
 // * netlib-compatible BLAS backend (the default), and
 // * complex<double> value-type.
 //
-template< typename Order, typename UpLo, typename TransA, typename Diag >
-inline void trsm( Order, const char side, UpLo, TransA, Diag,
-        const fortran_int_t m, const fortran_int_t n,
-        const std::complex<double> alpha, const std::complex<double>* a,
-        const fortran_int_t lda, std::complex<double>* b,
-        const fortran_int_t ldb ) {
+template< typename Order, typename Side, typename UpLo, typename TransA,
+        typename Diag >
+inline void trsm( const Order order, const Side side, const UpLo uplo,
+        const TransA transa, const Diag diag, const fortran_int_t m,
+        const fortran_int_t n, const std::complex<double> alpha,
+        const std::complex<double>* a, const fortran_int_t lda,
+        std::complex<double>* b, const fortran_int_t ldb ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
-    BLAS_ZTRSM( &side, &blas_option< UpLo >::value, &blas_option<
-            TransA >::value, &blas_option< Diag >::value, &m, &n, &alpha, a,
-            &lda, b, &ldb );
+    BLAS_ZTRSM( &blas_option< Side >::value, &blas_option< UpLo >::value,
+            &blas_option< TransA >::value, &blas_option< Diag >::value, &m,
+            &n, &alpha, a, &lda, b, &ldb );
 }
 
 #endif
@@ -267,13 +283,13 @@
     // * Deduces the required arguments for dispatching to BLAS, and
     // * Asserts that most arguments make sense.
     //
-    template< typename MatrixA, typename MatrixB >
-    static return_type invoke( const char side, const value_type alpha,
+    template< typename Side, typename MatrixA, typename MatrixB >
+    static return_type invoke( const Side side, const value_type alpha,
             const MatrixA& a, MatrixB& b ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::data_order< MatrixB >::type order;
         typedef typename result_of::trans_tag< MatrixA, order >::type transa;
-        typedef typename result_of::uplo_tag< MatrixA, trans >::type uplo;
+        typedef typename result_of::uplo_tag< MatrixA, transa >::type uplo;
         typedef typename result_of::diag_tag< MatrixA >::type diag;
         BOOST_STATIC_ASSERT( (is_same< typename remove_const<
                 typename bindings::value_type< MatrixA >::type >::type,
@@ -284,7 +300,6 @@
                 bindings::stride_minor(a) == 1 );
         BOOST_ASSERT( bindings::size_minor(b) == 1 ||
                 bindings::stride_minor(b) == 1 );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         detail::trsm( order(), side, uplo(), transa(), diag(),
                 bindings::size_row(b), bindings::size_column(b), alpha,
                 bindings::begin_value(a), bindings::stride_major(a),
@@ -304,10 +319,10 @@
 // Overloaded function for trsm. Its overload differs for
 // * MatrixB&
 //
-template< typename MatrixA, typename MatrixB >
+template< typename Side, typename MatrixA, typename MatrixB >
 inline typename trsm_impl< typename bindings::value_type<
         MatrixA >::type >::return_type
-trsm( const char side, const typename bindings::value_type<
+trsm( const Side side, const typename bindings::value_type<
         MatrixA >::type alpha, const MatrixA& a, MatrixB& b ) {
     trsm_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, alpha, a, b );
@@ -317,10 +332,10 @@
 // Overloaded function for trsm. Its overload differs for
 // * const MatrixB&
 //
-template< typename MatrixA, typename MatrixB >
+template< typename Side, typename MatrixA, typename MatrixB >
 inline typename trsm_impl< typename bindings::value_type<
         MatrixA >::type >::return_type
-trsm( const char side, const typename bindings::value_type<
+trsm( const Side side, const typename bindings::value_type<
         MatrixA >::type alpha, const MatrixA& a, const MatrixB& b ) {
     trsm_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, alpha, a, b );
Added: sandbox/numeric_bindings/boost/numeric/bindings/detail/if_left.hpp
==============================================================================
--- (empty file)
+++ sandbox/numeric_bindings/boost/numeric/bindings/detail/if_left.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -0,0 +1,52 @@
+//
+// Copyright (c) 2009 Rutger ter Borg
+//
+// Distributed under the Boost Software License, Version 1.0.
+// (See accompanying file LICENSE_1_0.txt or copy at
+// http://www.boost.org/LICENSE_1_0.txt)
+//
+
+#ifndef BOOST_NUMERIC_BINDINGS_DETAIL_IF_LEFT_HPP
+#define BOOST_NUMERIC_BINDINGS_DETAIL_IF_LEFT_HPP
+
+#include <boost/numeric/bindings/tag.hpp>
+
+namespace boost {
+namespace numeric {
+namespace bindings {
+namespace detail {
+
+template< typename Side, typename Left, typename Right >
+struct if_left_impl {
+    typedef Right result_type;
+
+    static result_type invoke( Left left, Right right ) {
+        return right;
+    }
+
+};
+
+template< typename Left, typename Right >
+struct if_left_impl< tag::left, Left, Right > {
+
+    typedef Left result_type;
+
+    static result_type invoke( Left left, Right right ) {
+        return left;
+    }
+
+};
+
+// by-value 
+template< typename Side, typename Left, typename Right >
+typename if_left_impl< Side, const Left, const Right >::result_type 
+if_left( const Side side, const Left left, const Right right ) {
+    return if_left_impl< Side, const Left, const Right >::invoke( left, right );
+}
+
+} // namespace detail
+} // namespace bindings
+} // namespace numeric
+} // namespace boost
+
+#endif
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/langb.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/langb.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/langb.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -171,8 +171,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lange.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lange.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lange.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -166,8 +166,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lanhb.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lanhb.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lanhb.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,9 +52,10 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t lanhb( const char norm, UpLo, const fortran_int_t n,
-        const fortran_int_t k, const std::complex<float>* ab,
-        const fortran_int_t ldab, float* work ) {
+inline std::ptrdiff_t lanhb( const char norm, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t k,
+        const std::complex<float>* ab, const fortran_int_t ldab,
+        float* work ) {
     fortran_int_t info(0);
     LAPACK_CLANHB( &norm, &lapack_option< UpLo >::value, &n, &k, ab, &ldab,
             work );
@@ -67,9 +68,10 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t lanhb( const char norm, UpLo, const fortran_int_t n,
-        const fortran_int_t k, const std::complex<double>* ab,
-        const fortran_int_t ldab, double* work ) {
+inline std::ptrdiff_t lanhb( const char norm, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t k,
+        const std::complex<double>* ab, const fortran_int_t ldab,
+        double* work ) {
     fortran_int_t info(0);
     LAPACK_ZLANHB( &norm, &lapack_option< UpLo >::value, &n, &k, ab, &ldab,
             work );
@@ -149,8 +151,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lanhe.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lanhe.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lanhe.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -51,8 +51,9 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t lanhe( const char norm, UpLo, const fortran_int_t n,
-        const std::complex<float>* a, const fortran_int_t lda, float* work ) {
+inline std::ptrdiff_t lanhe( const char norm, const UpLo uplo,
+        const fortran_int_t n, const std::complex<float>* a,
+        const fortran_int_t lda, float* work ) {
     fortran_int_t info(0);
     LAPACK_CLANHE( &norm, &lapack_option< UpLo >::value, &n, a, &lda, work );
     return info;
@@ -64,9 +65,9 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t lanhe( const char norm, UpLo, const fortran_int_t n,
-        const std::complex<double>* a, const fortran_int_t lda,
-        double* work ) {
+inline std::ptrdiff_t lanhe( const char norm, const UpLo uplo,
+        const fortran_int_t n, const std::complex<double>* a,
+        const fortran_int_t lda, double* work ) {
     fortran_int_t info(0);
     LAPACK_ZLANHE( &norm, &lapack_option< UpLo >::value, &n, a, &lda, work );
     return info;
@@ -143,8 +144,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lanhp.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lanhp.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lanhp.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -51,8 +51,8 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t lanhp( const char norm, UpLo, const fortran_int_t n,
-        const std::complex<float>* ap, float* work ) {
+inline std::ptrdiff_t lanhp( const char norm, const UpLo uplo,
+        const fortran_int_t n, const std::complex<float>* ap, float* work ) {
     fortran_int_t info(0);
     LAPACK_CLANHP( &norm, &lapack_option< UpLo >::value, &n, ap, work );
     return info;
@@ -64,8 +64,8 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t lanhp( const char norm, UpLo, const fortran_int_t n,
-        const std::complex<double>* ap, double* work ) {
+inline std::ptrdiff_t lanhp( const char norm, const UpLo uplo,
+        const fortran_int_t n, const std::complex<double>* ap, double* work ) {
     fortran_int_t info(0);
     LAPACK_ZLANHP( &norm, &lapack_option< UpLo >::value, &n, ap, work );
     return info;
@@ -138,8 +138,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lanhs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lanhs.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lanhs.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -161,8 +161,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lansb.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lansb.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lansb.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,9 +52,9 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t lansb( const char norm, UpLo, const fortran_int_t n,
-        const fortran_int_t k, const float* ab, const fortran_int_t ldab,
-        float* work ) {
+inline std::ptrdiff_t lansb( const char norm, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t k, const float* ab,
+        const fortran_int_t ldab, float* work ) {
     fortran_int_t info(0);
     LAPACK_SLANSB( &norm, &lapack_option< UpLo >::value, &n, &k, ab, &ldab,
             work );
@@ -67,9 +67,9 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t lansb( const char norm, UpLo, const fortran_int_t n,
-        const fortran_int_t k, const double* ab, const fortran_int_t ldab,
-        double* work ) {
+inline std::ptrdiff_t lansb( const char norm, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t k, const double* ab,
+        const fortran_int_t ldab, double* work ) {
     fortran_int_t info(0);
     LAPACK_DLANSB( &norm, &lapack_option< UpLo >::value, &n, &k, ab, &ldab,
             work );
@@ -82,9 +82,10 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t lansb( const char norm, UpLo, const fortran_int_t n,
-        const fortran_int_t k, const std::complex<float>* ab,
-        const fortran_int_t ldab, float* work ) {
+inline std::ptrdiff_t lansb( const char norm, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t k,
+        const std::complex<float>* ab, const fortran_int_t ldab,
+        float* work ) {
     fortran_int_t info(0);
     LAPACK_CLANSB( &norm, &lapack_option< UpLo >::value, &n, &k, ab, &ldab,
             work );
@@ -97,9 +98,10 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t lansb( const char norm, UpLo, const fortran_int_t n,
-        const fortran_int_t k, const std::complex<double>* ab,
-        const fortran_int_t ldab, double* work ) {
+inline std::ptrdiff_t lansb( const char norm, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t k,
+        const std::complex<double>* ab, const fortran_int_t ldab,
+        double* work ) {
     fortran_int_t info(0);
     LAPACK_ZLANSB( &norm, &lapack_option< UpLo >::value, &n, &k, ab, &ldab,
             work );
@@ -179,8 +181,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lansp.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lansp.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lansp.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -51,8 +51,8 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t lansp( const char norm, UpLo, const fortran_int_t n,
-        const float* ap, float* work ) {
+inline std::ptrdiff_t lansp( const char norm, const UpLo uplo,
+        const fortran_int_t n, const float* ap, float* work ) {
     fortran_int_t info(0);
     LAPACK_SLANSP( &norm, &lapack_option< UpLo >::value, &n, ap, work );
     return info;
@@ -64,8 +64,8 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t lansp( const char norm, UpLo, const fortran_int_t n,
-        const double* ap, double* work ) {
+inline std::ptrdiff_t lansp( const char norm, const UpLo uplo,
+        const fortran_int_t n, const double* ap, double* work ) {
     fortran_int_t info(0);
     LAPACK_DLANSP( &norm, &lapack_option< UpLo >::value, &n, ap, work );
     return info;
@@ -77,8 +77,8 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t lansp( const char norm, UpLo, const fortran_int_t n,
-        const std::complex<float>* ap, float* work ) {
+inline std::ptrdiff_t lansp( const char norm, const UpLo uplo,
+        const fortran_int_t n, const std::complex<float>* ap, float* work ) {
     fortran_int_t info(0);
     LAPACK_CLANSP( &norm, &lapack_option< UpLo >::value, &n, ap, work );
     return info;
@@ -90,8 +90,8 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t lansp( const char norm, UpLo, const fortran_int_t n,
-        const std::complex<double>* ap, double* work ) {
+inline std::ptrdiff_t lansp( const char norm, const UpLo uplo,
+        const fortran_int_t n, const std::complex<double>* ap, double* work ) {
     fortran_int_t info(0);
     LAPACK_ZLANSP( &norm, &lapack_option< UpLo >::value, &n, ap, work );
     return info;
@@ -164,8 +164,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lansy.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lansy.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lansy.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -51,8 +51,9 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t lansy( const char norm, UpLo, const fortran_int_t n,
-        const float* a, const fortran_int_t lda, float* work ) {
+inline std::ptrdiff_t lansy( const char norm, const UpLo uplo,
+        const fortran_int_t n, const float* a, const fortran_int_t lda,
+        float* work ) {
     fortran_int_t info(0);
     LAPACK_SLANSY( &norm, &lapack_option< UpLo >::value, &n, a, &lda, work );
     return info;
@@ -64,8 +65,9 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t lansy( const char norm, UpLo, const fortran_int_t n,
-        const double* a, const fortran_int_t lda, double* work ) {
+inline std::ptrdiff_t lansy( const char norm, const UpLo uplo,
+        const fortran_int_t n, const double* a, const fortran_int_t lda,
+        double* work ) {
     fortran_int_t info(0);
     LAPACK_DLANSY( &norm, &lapack_option< UpLo >::value, &n, a, &lda, work );
     return info;
@@ -77,8 +79,9 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t lansy( const char norm, UpLo, const fortran_int_t n,
-        const std::complex<float>* a, const fortran_int_t lda, float* work ) {
+inline std::ptrdiff_t lansy( const char norm, const UpLo uplo,
+        const fortran_int_t n, const std::complex<float>* a,
+        const fortran_int_t lda, float* work ) {
     fortran_int_t info(0);
     LAPACK_CLANSY( &norm, &lapack_option< UpLo >::value, &n, a, &lda, work );
     return info;
@@ -90,9 +93,9 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t lansy( const char norm, UpLo, const fortran_int_t n,
-        const std::complex<double>* a, const fortran_int_t lda,
-        double* work ) {
+inline std::ptrdiff_t lansy( const char norm, const UpLo uplo,
+        const fortran_int_t n, const std::complex<double>* a,
+        const fortran_int_t lda, double* work ) {
     fortran_int_t info(0);
     LAPACK_ZLANSY( &norm, &lapack_option< UpLo >::value, &n, a, &lda, work );
     return info;
@@ -169,8 +172,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lantb.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lantb.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lantb.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -53,7 +53,7 @@
 // * float value-type.
 //
 template< typename Diag >
-inline std::ptrdiff_t lantb( const char norm, const char uplo, Diag,
+inline std::ptrdiff_t lantb( const char norm, const char uplo, const Diag diag,
         const fortran_int_t n, const fortran_int_t k, const float* ab,
         const fortran_int_t ldab, float* work ) {
     fortran_int_t info(0);
@@ -68,7 +68,7 @@
 // * double value-type.
 //
 template< typename Diag >
-inline std::ptrdiff_t lantb( const char norm, const char uplo, Diag,
+inline std::ptrdiff_t lantb( const char norm, const char uplo, const Diag diag,
         const fortran_int_t n, const fortran_int_t k, const double* ab,
         const fortran_int_t ldab, double* work ) {
     fortran_int_t info(0);
@@ -83,7 +83,7 @@
 // * complex<float> value-type.
 //
 template< typename Diag >
-inline std::ptrdiff_t lantb( const char norm, const char uplo, Diag,
+inline std::ptrdiff_t lantb( const char norm, const char uplo, const Diag diag,
         const fortran_int_t n, const fortran_int_t k,
         const std::complex<float>* ab, const fortran_int_t ldab,
         float* work ) {
@@ -99,7 +99,7 @@
 // * complex<double> value-type.
 //
 template< typename Diag >
-inline std::ptrdiff_t lantb( const char norm, const char uplo, Diag,
+inline std::ptrdiff_t lantb( const char norm, const char uplo, const Diag diag,
         const fortran_int_t n, const fortran_int_t k,
         const std::complex<double>* ab, const fortran_int_t ldab,
         double* work ) {
@@ -183,8 +183,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lantp.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lantp.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lantp.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,7 +52,7 @@
 // * float value-type.
 //
 template< typename Diag >
-inline std::ptrdiff_t lantp( const char norm, const char uplo, Diag,
+inline std::ptrdiff_t lantp( const char norm, const char uplo, const Diag diag,
         const fortran_int_t n, const float* ap, float* work ) {
     fortran_int_t info(0);
     LAPACK_SLANTP( &norm, &uplo, &lapack_option< Diag >::value, &n, ap, work );
@@ -65,7 +65,7 @@
 // * double value-type.
 //
 template< typename Diag >
-inline std::ptrdiff_t lantp( const char norm, const char uplo, Diag,
+inline std::ptrdiff_t lantp( const char norm, const char uplo, const Diag diag,
         const fortran_int_t n, const double* ap, double* work ) {
     fortran_int_t info(0);
     LAPACK_DLANTP( &norm, &uplo, &lapack_option< Diag >::value, &n, ap, work );
@@ -78,7 +78,7 @@
 // * complex<float> value-type.
 //
 template< typename Diag >
-inline std::ptrdiff_t lantp( const char norm, const char uplo, Diag,
+inline std::ptrdiff_t lantp( const char norm, const char uplo, const Diag diag,
         const fortran_int_t n, const std::complex<float>* ap, float* work ) {
     fortran_int_t info(0);
     LAPACK_CLANTP( &norm, &uplo, &lapack_option< Diag >::value, &n, ap, work );
@@ -91,7 +91,7 @@
 // * complex<double> value-type.
 //
 template< typename Diag >
-inline std::ptrdiff_t lantp( const char norm, const char uplo, Diag,
+inline std::ptrdiff_t lantp( const char norm, const char uplo, const Diag diag,
         const fortran_int_t n, const std::complex<double>* ap, double* work ) {
     fortran_int_t info(0);
     LAPACK_ZLANTP( &norm, &uplo, &lapack_option< Diag >::value, &n, ap, work );
@@ -165,8 +165,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lantr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lantr.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/lantr.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,7 +52,7 @@
 // * float value-type.
 //
 template< typename UpLo, typename Diag >
-inline std::ptrdiff_t lantr( const char norm, UpLo, Diag,
+inline std::ptrdiff_t lantr( const char norm, const UpLo uplo, const Diag diag,
         const fortran_int_t m, const fortran_int_t n, const float* a,
         const fortran_int_t lda, float* work ) {
     fortran_int_t info(0);
@@ -67,7 +67,7 @@
 // * double value-type.
 //
 template< typename UpLo, typename Diag >
-inline std::ptrdiff_t lantr( const char norm, UpLo, Diag,
+inline std::ptrdiff_t lantr( const char norm, const UpLo uplo, const Diag diag,
         const fortran_int_t m, const fortran_int_t n, const double* a,
         const fortran_int_t lda, double* work ) {
     fortran_int_t info(0);
@@ -82,7 +82,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo, typename Diag >
-inline std::ptrdiff_t lantr( const char norm, UpLo, Diag,
+inline std::ptrdiff_t lantr( const char norm, const UpLo uplo, const Diag diag,
         const fortran_int_t m, const fortran_int_t n,
         const std::complex<float>* a, const fortran_int_t lda, float* work ) {
     fortran_int_t info(0);
@@ -97,7 +97,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo, typename Diag >
-inline std::ptrdiff_t lantr( const char norm, UpLo, Diag,
+inline std::ptrdiff_t lantr( const char norm, const UpLo uplo, const Diag diag,
         const fortran_int_t m, const fortran_int_t n,
         const std::complex<double>* a, const fortran_int_t lda,
         double* work ) {
@@ -183,8 +183,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/larf.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/larf.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/larf.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,11 +52,13 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * float value-type.
 //
-inline std::ptrdiff_t larf( const char side, const fortran_int_t m,
+template< typename Side >
+inline std::ptrdiff_t larf( const Side side, const fortran_int_t m,
         const fortran_int_t n, const float* v, const fortran_int_t incv,
         const float tau, float* c, const fortran_int_t ldc, float* work ) {
     fortran_int_t info(0);
-    LAPACK_SLARF( &side, &m, &n, v, &incv, &tau, c, &ldc, work );
+    LAPACK_SLARF( &lapack_option< Side >::value, &m, &n, v, &incv, &tau, c,
+            &ldc, work );
     return info;
 }
 
@@ -65,11 +67,13 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * double value-type.
 //
-inline std::ptrdiff_t larf( const char side, const fortran_int_t m,
+template< typename Side >
+inline std::ptrdiff_t larf( const Side side, const fortran_int_t m,
         const fortran_int_t n, const double* v, const fortran_int_t incv,
         const double tau, double* c, const fortran_int_t ldc, double* work ) {
     fortran_int_t info(0);
-    LAPACK_DLARF( &side, &m, &n, v, &incv, &tau, c, &ldc, work );
+    LAPACK_DLARF( &lapack_option< Side >::value, &m, &n, v, &incv, &tau, c,
+            &ldc, work );
     return info;
 }
 
@@ -78,13 +82,15 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<float> value-type.
 //
-inline std::ptrdiff_t larf( const char side, const fortran_int_t m,
+template< typename Side >
+inline std::ptrdiff_t larf( const Side side, const fortran_int_t m,
         const fortran_int_t n, const std::complex<float>* v,
         const fortran_int_t incv, const std::complex<float> tau,
         std::complex<float>* c, const fortran_int_t ldc,
         std::complex<float>* work ) {
     fortran_int_t info(0);
-    LAPACK_CLARF( &side, &m, &n, v, &incv, &tau, c, &ldc, work );
+    LAPACK_CLARF( &lapack_option< Side >::value, &m, &n, v, &incv, &tau, c,
+            &ldc, work );
     return info;
 }
 
@@ -93,13 +99,15 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<double> value-type.
 //
-inline std::ptrdiff_t larf( const char side, const fortran_int_t m,
+template< typename Side >
+inline std::ptrdiff_t larf( const Side side, const fortran_int_t m,
         const fortran_int_t n, const std::complex<double>* v,
         const fortran_int_t incv, const std::complex<double> tau,
         std::complex<double>* c, const fortran_int_t ldc,
         std::complex<double>* work ) {
     fortran_int_t info(0);
-    LAPACK_ZLARF( &side, &m, &n, v, &incv, &tau, c, &ldc, work );
+    LAPACK_ZLARF( &lapack_option< Side >::value, &m, &n, v, &incv, &tau, c,
+            &ldc, work );
     return info;
 }
 
@@ -127,8 +135,9 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename VectorV, typename MatrixC, typename WORK >
-    static std::ptrdiff_t invoke( const char side, const VectorV& v,
+    template< typename Side, typename VectorV, typename MatrixC,
+            typename WORK >
+    static std::ptrdiff_t invoke( const Side side, const VectorV& v,
             const real_type tau, MatrixC& c, detail::workspace1<
             WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -144,7 +153,6 @@
                 bindings::stride_minor(c) == 1 );
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         return detail::larf( side, bindings::size_row(c),
                 bindings::size_column(c), bindings::begin_value(v),
                 bindings::stride(v), tau, bindings::begin_value(c),
@@ -159,8 +167,8 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename VectorV, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const VectorV& v,
+    template< typename Side, typename VectorV, typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const VectorV& v,
             const real_type tau, MatrixC& c, minimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
         bindings::detail::array< real_type > tmp_work( min_size_work( side,
@@ -175,8 +183,8 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename VectorV, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const VectorV& v,
+    template< typename Side, typename VectorV, typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const VectorV& v,
             const real_type tau, MatrixC& c, optimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
         return invoke( side, v, tau, c, minimal_workspace() );
@@ -186,7 +194,8 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
-    static std::ptrdiff_t min_size_work( const char side,
+    template< typename Side >
+    static std::ptrdiff_t min_size_work( const Side side,
             const std::ptrdiff_t n, const std::ptrdiff_t m ) {
         return ( side == 'L' ? n : m );
     }
@@ -207,8 +216,9 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename VectorV, typename MatrixC, typename WORK >
-    static std::ptrdiff_t invoke( const char side, const VectorV& v,
+    template< typename Side, typename VectorV, typename MatrixC,
+            typename WORK >
+    static std::ptrdiff_t invoke( const Side side, const VectorV& v,
             const value_type tau, MatrixC& c, detail::workspace1<
             WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -224,7 +234,6 @@
                 bindings::stride_minor(c) == 1 );
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         return detail::larf( side, bindings::size_row(c),
                 bindings::size_column(c), bindings::begin_value(v),
                 bindings::stride(v), tau, bindings::begin_value(c),
@@ -239,8 +248,8 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename VectorV, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const VectorV& v,
+    template< typename Side, typename VectorV, typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const VectorV& v,
             const value_type tau, MatrixC& c, minimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
         bindings::detail::array< value_type > tmp_work( min_size_work( side,
@@ -255,8 +264,8 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename VectorV, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const VectorV& v,
+    template< typename Side, typename VectorV, typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const VectorV& v,
             const value_type tau, MatrixC& c, optimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
         return invoke( side, v, tau, c, minimal_workspace() );
@@ -266,7 +275,8 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
-    static std::ptrdiff_t min_size_work( const char side,
+    template< typename Side >
+    static std::ptrdiff_t min_size_work( const Side side,
             const std::ptrdiff_t n, const std::ptrdiff_t m ) {
         return ( side == 'L' ? n : m );
     }
@@ -287,10 +297,11 @@
 // * MatrixC&
 // * User-defined workspace
 //
-template< typename VectorV, typename MatrixC, typename Workspace >
+template< typename Side, typename VectorV, typename MatrixC,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-larf( const char side, const VectorV& v,
+larf( const Side side, const VectorV& v,
         const typename remove_imaginary< typename bindings::value_type<
         VectorV >::type >::type tau, MatrixC& c, Workspace work ) {
     return larf_impl< typename bindings::value_type<
@@ -302,10 +313,10 @@
 // * MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename VectorV, typename MatrixC >
+template< typename Side, typename VectorV, typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-larf( const char side, const VectorV& v,
+larf( const Side side, const VectorV& v,
         const typename remove_imaginary< typename bindings::value_type<
         VectorV >::type >::type tau, MatrixC& c ) {
     return larf_impl< typename bindings::value_type<
@@ -317,10 +328,11 @@
 // * const MatrixC&
 // * User-defined workspace
 //
-template< typename VectorV, typename MatrixC, typename Workspace >
+template< typename Side, typename VectorV, typename MatrixC,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-larf( const char side, const VectorV& v,
+larf( const Side side, const VectorV& v,
         const typename remove_imaginary< typename bindings::value_type<
         VectorV >::type >::type tau, const MatrixC& c, Workspace work ) {
     return larf_impl< typename bindings::value_type<
@@ -332,10 +344,10 @@
 // * const MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename VectorV, typename MatrixC >
+template< typename Side, typename VectorV, typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-larf( const char side, const VectorV& v,
+larf( const Side side, const VectorV& v,
         const typename remove_imaginary< typename bindings::value_type<
         VectorV >::type >::type tau, const MatrixC& c ) {
     return larf_impl< typename bindings::value_type<
@@ -346,10 +358,11 @@
 // * MatrixC&
 // * User-defined workspace
 //
-template< typename VectorV, typename MatrixC, typename Workspace >
+template< typename Side, typename VectorV, typename MatrixC,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-larf( const char side, const VectorV& v,
+larf( const Side side, const VectorV& v,
         const typename bindings::value_type< VectorV >::type tau, MatrixC& c,
         Workspace work ) {
     return larf_impl< typename bindings::value_type<
@@ -361,10 +374,10 @@
 // * MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename VectorV, typename MatrixC >
+template< typename Side, typename VectorV, typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-larf( const char side, const VectorV& v,
+larf( const Side side, const VectorV& v,
         const typename bindings::value_type< VectorV >::type tau,
         MatrixC& c ) {
     return larf_impl< typename bindings::value_type<
@@ -376,10 +389,11 @@
 // * const MatrixC&
 // * User-defined workspace
 //
-template< typename VectorV, typename MatrixC, typename Workspace >
+template< typename Side, typename VectorV, typename MatrixC,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-larf( const char side, const VectorV& v,
+larf( const Side side, const VectorV& v,
         const typename bindings::value_type< VectorV >::type tau,
         const MatrixC& c, Workspace work ) {
     return larf_impl< typename bindings::value_type<
@@ -391,10 +405,10 @@
 // * const MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename VectorV, typename MatrixC >
+template< typename Side, typename VectorV, typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-larf( const char side, const VectorV& v,
+larf( const Side side, const VectorV& v,
         const typename bindings::value_type< VectorV >::type tau,
         const MatrixC& c ) {
     return larf_impl< typename bindings::value_type<
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/larfb.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/larfb.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/larfb.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -53,15 +53,17 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * float value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t larfb( const char side, Trans, const char direct,
-        const char storev, const fortran_int_t m, const fortran_int_t n,
-        const fortran_int_t k, const float* v, const fortran_int_t ldv,
-        const float* t, const fortran_int_t ldt, float* c,
-        const fortran_int_t ldc, float* work, const fortran_int_t ldwork ) {
+template< typename Side, typename Trans >
+inline std::ptrdiff_t larfb( const Side side, const Trans trans,
+        const char direct, const char storev, const fortran_int_t m,
+        const fortran_int_t n, const fortran_int_t k, const float* v,
+        const fortran_int_t ldv, const float* t, const fortran_int_t ldt,
+        float* c, const fortran_int_t ldc, float* work,
+        const fortran_int_t ldwork ) {
     fortran_int_t info(0);
-    LAPACK_SLARFB( &side, &lapack_option< Trans >::value, &direct, &storev,
-            &m, &n, &k, v, &ldv, t, &ldt, c, &ldc, work, &ldwork );
+    LAPACK_SLARFB( &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &direct, &storev, &m, &n, &k, v, &ldv, t, &ldt, c,
+            &ldc, work, &ldwork );
     return info;
 }
 
@@ -70,15 +72,17 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * double value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t larfb( const char side, Trans, const char direct,
-        const char storev, const fortran_int_t m, const fortran_int_t n,
-        const fortran_int_t k, const double* v, const fortran_int_t ldv,
-        const double* t, const fortran_int_t ldt, double* c,
-        const fortran_int_t ldc, double* work, const fortran_int_t ldwork ) {
+template< typename Side, typename Trans >
+inline std::ptrdiff_t larfb( const Side side, const Trans trans,
+        const char direct, const char storev, const fortran_int_t m,
+        const fortran_int_t n, const fortran_int_t k, const double* v,
+        const fortran_int_t ldv, const double* t, const fortran_int_t ldt,
+        double* c, const fortran_int_t ldc, double* work,
+        const fortran_int_t ldwork ) {
     fortran_int_t info(0);
-    LAPACK_DLARFB( &side, &lapack_option< Trans >::value, &direct, &storev,
-            &m, &n, &k, v, &ldv, t, &ldt, c, &ldc, work, &ldwork );
+    LAPACK_DLARFB( &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &direct, &storev, &m, &n, &k, v, &ldv, t, &ldt, c,
+            &ldc, work, &ldwork );
     return info;
 }
 
@@ -87,17 +91,18 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<float> value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t larfb( const char side, Trans, const char direct,
-        const char storev, const fortran_int_t m, const fortran_int_t n,
-        const fortran_int_t k, const std::complex<float>* v,
-        const fortran_int_t ldv, const std::complex<float>* t,
-        const fortran_int_t ldt, std::complex<float>* c,
-        const fortran_int_t ldc, std::complex<float>* work,
-        const fortran_int_t ldwork ) {
+template< typename Side, typename Trans >
+inline std::ptrdiff_t larfb( const Side side, const Trans trans,
+        const char direct, const char storev, const fortran_int_t m,
+        const fortran_int_t n, const fortran_int_t k,
+        const std::complex<float>* v, const fortran_int_t ldv,
+        const std::complex<float>* t, const fortran_int_t ldt,
+        std::complex<float>* c, const fortran_int_t ldc,
+        std::complex<float>* work, const fortran_int_t ldwork ) {
     fortran_int_t info(0);
-    LAPACK_CLARFB( &side, &lapack_option< Trans >::value, &direct, &storev,
-            &m, &n, &k, v, &ldv, t, &ldt, c, &ldc, work, &ldwork );
+    LAPACK_CLARFB( &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &direct, &storev, &m, &n, &k, v, &ldv, t, &ldt, c,
+            &ldc, work, &ldwork );
     return info;
 }
 
@@ -106,17 +111,18 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<double> value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t larfb( const char side, Trans, const char direct,
-        const char storev, const fortran_int_t m, const fortran_int_t n,
-        const fortran_int_t k, const std::complex<double>* v,
-        const fortran_int_t ldv, const std::complex<double>* t,
-        const fortran_int_t ldt, std::complex<double>* c,
-        const fortran_int_t ldc, std::complex<double>* work,
-        const fortran_int_t ldwork ) {
+template< typename Side, typename Trans >
+inline std::ptrdiff_t larfb( const Side side, const Trans trans,
+        const char direct, const char storev, const fortran_int_t m,
+        const fortran_int_t n, const fortran_int_t k,
+        const std::complex<double>* v, const fortran_int_t ldv,
+        const std::complex<double>* t, const fortran_int_t ldt,
+        std::complex<double>* c, const fortran_int_t ldc,
+        std::complex<double>* work, const fortran_int_t ldwork ) {
     fortran_int_t info(0);
-    LAPACK_ZLARFB( &side, &lapack_option< Trans >::value, &direct, &storev,
-            &m, &n, &k, v, &ldv, t, &ldt, c, &ldc, work, &ldwork );
+    LAPACK_ZLARFB( &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &direct, &storev, &m, &n, &k, v, &ldv, t, &ldt, c,
+            &ldc, work, &ldwork );
     return info;
 }
 
@@ -144,9 +150,9 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename MatrixV, typename MatrixT, typename MatrixC,
-            typename WORK >
-    static std::ptrdiff_t invoke( const char side, const char direct,
+    template< typename Side, typename MatrixV, typename MatrixT,
+            typename MatrixC, typename WORK >
+    static std::ptrdiff_t invoke( const Side side, const char direct,
             const char storev, const MatrixV& v, const MatrixT& t, MatrixC& c,
             detail::workspace1< WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -171,7 +177,6 @@
                 bindings::size_row(c)) );
         BOOST_ASSERT( bindings::stride_major(t) >= bindings::size_column(t) );
         BOOST_ASSERT( direct == 'F' || direct == 'B' );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         BOOST_ASSERT( storev == 'C' || storev == 'R' );
         return detail::larfb( side, trans(), direct, storev,
                 bindings::size_row(c), bindings::size_column(c),
@@ -189,8 +194,9 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename MatrixV, typename MatrixT, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const char direct,
+    template< typename Side, typename MatrixV, typename MatrixT,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const char direct,
             const char storev, const MatrixV& v, const MatrixT& t, MatrixC& c,
             minimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -206,8 +212,9 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename MatrixV, typename MatrixT, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const char direct,
+    template< typename Side, typename MatrixV, typename MatrixT,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const char direct,
             const char storev, const MatrixV& v, const MatrixT& t, MatrixC& c,
             optimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -218,8 +225,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
@@ -238,9 +246,9 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename MatrixV, typename MatrixT, typename MatrixC,
-            typename WORK >
-    static std::ptrdiff_t invoke( const char side, const char direct,
+    template< typename Side, typename MatrixV, typename MatrixT,
+            typename MatrixC, typename WORK >
+    static std::ptrdiff_t invoke( const Side side, const char direct,
             const char storev, const MatrixV& v, const MatrixT& t, MatrixC& c,
             detail::workspace1< WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -265,7 +273,6 @@
                 bindings::size_row(c)) );
         BOOST_ASSERT( bindings::stride_major(t) >= bindings::size_column(t) );
         BOOST_ASSERT( direct == 'F' || direct == 'B' );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         BOOST_ASSERT( storev == 'C' || storev == 'R' );
         return detail::larfb( side, trans(), direct, storev,
                 bindings::size_row(c), bindings::size_column(c),
@@ -283,8 +290,9 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename MatrixV, typename MatrixT, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const char direct,
+    template< typename Side, typename MatrixV, typename MatrixT,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const char direct,
             const char storev, const MatrixV& v, const MatrixT& t, MatrixC& c,
             minimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -300,8 +308,9 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename MatrixV, typename MatrixT, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const char direct,
+    template< typename Side, typename MatrixV, typename MatrixT,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const char direct,
             const char storev, const MatrixV& v, const MatrixT& t, MatrixC& c,
             optimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -312,8 +321,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
@@ -332,11 +342,11 @@
 // * MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixV, typename MatrixT, typename MatrixC,
+template< typename Side, typename MatrixV, typename MatrixT, typename MatrixC,
         typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-larfb( const char side, const char direct, const char storev,
+larfb( const Side side, const char direct, const char storev,
         const MatrixV& v, const MatrixT& t, MatrixC& c, Workspace work ) {
     return larfb_impl< typename bindings::value_type<
             MatrixV >::type >::invoke( side, direct, storev, v, t, c, work );
@@ -347,10 +357,10 @@
 // * MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixV, typename MatrixT, typename MatrixC >
+template< typename Side, typename MatrixV, typename MatrixT, typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-larfb( const char side, const char direct, const char storev,
+larfb( const Side side, const char direct, const char storev,
         const MatrixV& v, const MatrixT& t, MatrixC& c ) {
     return larfb_impl< typename bindings::value_type<
             MatrixV >::type >::invoke( side, direct, storev, v, t, c,
@@ -362,11 +372,11 @@
 // * const MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixV, typename MatrixT, typename MatrixC,
+template< typename Side, typename MatrixV, typename MatrixT, typename MatrixC,
         typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-larfb( const char side, const char direct, const char storev,
+larfb( const Side side, const char direct, const char storev,
         const MatrixV& v, const MatrixT& t, const MatrixC& c,
         Workspace work ) {
     return larfb_impl< typename bindings::value_type<
@@ -378,10 +388,10 @@
 // * const MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixV, typename MatrixT, typename MatrixC >
+template< typename Side, typename MatrixV, typename MatrixT, typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-larfb( const char side, const char direct, const char storev,
+larfb( const Side side, const char direct, const char storev,
         const MatrixV& v, const MatrixT& t, const MatrixC& c ) {
     return larfb_impl< typename bindings::value_type<
             MatrixV >::type >::invoke( side, direct, storev, v, t, c,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/larfx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/larfx.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/auxiliary/larfx.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,11 +52,13 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * float value-type.
 //
-inline std::ptrdiff_t larfx( const char side, const fortran_int_t m,
+template< typename Side >
+inline std::ptrdiff_t larfx( const Side side, const fortran_int_t m,
         const fortran_int_t n, const float* v, const float tau, float* c,
         const fortran_int_t ldc, float* work ) {
     fortran_int_t info(0);
-    LAPACK_SLARFX( &side, &m, &n, v, &tau, c, &ldc, work );
+    LAPACK_SLARFX( &lapack_option< Side >::value, &m, &n, v, &tau, c, &ldc,
+            work );
     return info;
 }
 
@@ -65,11 +67,13 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * double value-type.
 //
-inline std::ptrdiff_t larfx( const char side, const fortran_int_t m,
+template< typename Side >
+inline std::ptrdiff_t larfx( const Side side, const fortran_int_t m,
         const fortran_int_t n, const double* v, const double tau, double* c,
         const fortran_int_t ldc, double* work ) {
     fortran_int_t info(0);
-    LAPACK_DLARFX( &side, &m, &n, v, &tau, c, &ldc, work );
+    LAPACK_DLARFX( &lapack_option< Side >::value, &m, &n, v, &tau, c, &ldc,
+            work );
     return info;
 }
 
@@ -78,12 +82,14 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<float> value-type.
 //
-inline std::ptrdiff_t larfx( const char side, const fortran_int_t m,
+template< typename Side >
+inline std::ptrdiff_t larfx( const Side side, const fortran_int_t m,
         const fortran_int_t n, const std::complex<float>* v,
         const std::complex<float> tau, std::complex<float>* c,
         const fortran_int_t ldc, std::complex<float>* work ) {
     fortran_int_t info(0);
-    LAPACK_CLARFX( &side, &m, &n, v, &tau, c, &ldc, work );
+    LAPACK_CLARFX( &lapack_option< Side >::value, &m, &n, v, &tau, c, &ldc,
+            work );
     return info;
 }
 
@@ -92,12 +98,14 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<double> value-type.
 //
-inline std::ptrdiff_t larfx( const char side, const fortran_int_t m,
+template< typename Side >
+inline std::ptrdiff_t larfx( const Side side, const fortran_int_t m,
         const fortran_int_t n, const std::complex<double>* v,
         const std::complex<double> tau, std::complex<double>* c,
         const fortran_int_t ldc, std::complex<double>* work ) {
     fortran_int_t info(0);
-    LAPACK_ZLARFX( &side, &m, &n, v, &tau, c, &ldc, work );
+    LAPACK_ZLARFX( &lapack_option< Side >::value, &m, &n, v, &tau, c, &ldc,
+            work );
     return info;
 }
 
@@ -125,8 +133,9 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename VectorV, typename MatrixC, typename WORK >
-    static std::ptrdiff_t invoke( const char side, const VectorV& v,
+    template< typename Side, typename VectorV, typename MatrixC,
+            typename WORK >
+    static std::ptrdiff_t invoke( const Side side, const VectorV& v,
             const real_type tau, MatrixC& c, detail::workspace1<
             WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -140,7 +149,6 @@
         BOOST_ASSERT( bindings::size_minor(c) == 1 ||
                 bindings::stride_minor(c) == 1 );
         BOOST_ASSERT( bindings::stride_major(c) >= (ERROR) );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         return detail::larfx( side, bindings::size_row(c),
                 bindings::size_column(c), bindings::begin_value(v), tau,
                 bindings::begin_value(c), bindings::stride_major(c),
@@ -154,8 +162,8 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename VectorV, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const VectorV& v,
+    template< typename Side, typename VectorV, typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const VectorV& v,
             const real_type tau, MatrixC& c, minimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
         bindings::detail::array< real_type > tmp_work( min_size_work(
@@ -170,8 +178,8 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename VectorV, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const VectorV& v,
+    template< typename Side, typename VectorV, typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const VectorV& v,
             const real_type tau, MatrixC& c, optimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
         return invoke( side, v, tau, c, minimal_workspace() );
@@ -181,8 +189,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
@@ -201,8 +210,9 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename VectorV, typename MatrixC, typename WORK >
-    static std::ptrdiff_t invoke( const char side, const VectorV& v,
+    template< typename Side, typename VectorV, typename MatrixC,
+            typename WORK >
+    static std::ptrdiff_t invoke( const Side side, const VectorV& v,
             const value_type tau, MatrixC& c, detail::workspace1<
             WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -217,7 +227,6 @@
                 bindings::stride_minor(c) == 1 );
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         return detail::larfx( side, bindings::size_row(c),
                 bindings::size_column(c), bindings::begin_value(v), tau,
                 bindings::begin_value(c), bindings::stride_major(c),
@@ -231,8 +240,8 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename VectorV, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const VectorV& v,
+    template< typename Side, typename VectorV, typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const VectorV& v,
             const value_type tau, MatrixC& c, minimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
         bindings::detail::array< value_type > tmp_work( min_size_work(
@@ -247,8 +256,8 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename VectorV, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const VectorV& v,
+    template< typename Side, typename VectorV, typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const VectorV& v,
             const value_type tau, MatrixC& c, optimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
         return invoke( side, v, tau, c, minimal_workspace() );
@@ -258,8 +267,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
@@ -278,10 +288,11 @@
 // * MatrixC&
 // * User-defined workspace
 //
-template< typename VectorV, typename MatrixC, typename Workspace >
+template< typename Side, typename VectorV, typename MatrixC,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-larfx( const char side, const VectorV& v,
+larfx( const Side side, const VectorV& v,
         const typename remove_imaginary< typename bindings::value_type<
         VectorV >::type >::type tau, MatrixC& c, Workspace work ) {
     return larfx_impl< typename bindings::value_type<
@@ -293,10 +304,10 @@
 // * MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename VectorV, typename MatrixC >
+template< typename Side, typename VectorV, typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-larfx( const char side, const VectorV& v,
+larfx( const Side side, const VectorV& v,
         const typename remove_imaginary< typename bindings::value_type<
         VectorV >::type >::type tau, MatrixC& c ) {
     return larfx_impl< typename bindings::value_type<
@@ -308,10 +319,11 @@
 // * const MatrixC&
 // * User-defined workspace
 //
-template< typename VectorV, typename MatrixC, typename Workspace >
+template< typename Side, typename VectorV, typename MatrixC,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-larfx( const char side, const VectorV& v,
+larfx( const Side side, const VectorV& v,
         const typename remove_imaginary< typename bindings::value_type<
         VectorV >::type >::type tau, const MatrixC& c, Workspace work ) {
     return larfx_impl< typename bindings::value_type<
@@ -323,10 +335,10 @@
 // * const MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename VectorV, typename MatrixC >
+template< typename Side, typename VectorV, typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-larfx( const char side, const VectorV& v,
+larfx( const Side side, const VectorV& v,
         const typename remove_imaginary< typename bindings::value_type<
         VectorV >::type >::type tau, const MatrixC& c ) {
     return larfx_impl< typename bindings::value_type<
@@ -337,10 +349,11 @@
 // * MatrixC&
 // * User-defined workspace
 //
-template< typename VectorV, typename MatrixC, typename Workspace >
+template< typename Side, typename VectorV, typename MatrixC,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-larfx( const char side, const VectorV& v,
+larfx( const Side side, const VectorV& v,
         const typename bindings::value_type< VectorV >::type tau, MatrixC& c,
         Workspace work ) {
     return larfx_impl< typename bindings::value_type<
@@ -352,10 +365,10 @@
 // * MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename VectorV, typename MatrixC >
+template< typename Side, typename VectorV, typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-larfx( const char side, const VectorV& v,
+larfx( const Side side, const VectorV& v,
         const typename bindings::value_type< VectorV >::type tau,
         MatrixC& c ) {
     return larfx_impl< typename bindings::value_type<
@@ -367,10 +380,11 @@
 // * const MatrixC&
 // * User-defined workspace
 //
-template< typename VectorV, typename MatrixC, typename Workspace >
+template< typename Side, typename VectorV, typename MatrixC,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-larfx( const char side, const VectorV& v,
+larfx( const Side side, const VectorV& v,
         const typename bindings::value_type< VectorV >::type tau,
         const MatrixC& c, Workspace work ) {
     return larfx_impl< typename bindings::value_type<
@@ -382,10 +396,10 @@
 // * const MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename VectorV, typename MatrixC >
+template< typename Side, typename VectorV, typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-larfx( const char side, const VectorV& v,
+larfx( const Side side, const VectorV& v,
         const typename bindings::value_type< VectorV >::type tau,
         const MatrixC& c ) {
     return larfx_impl< typename bindings::value_type<
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbrfs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbrfs.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbrfs.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -55,7 +55,7 @@
 // * float value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gbrfs( Trans, const fortran_int_t n,
+inline std::ptrdiff_t gbrfs( const Trans trans, const fortran_int_t n,
         const fortran_int_t kl, const fortran_int_t ku,
         const fortran_int_t nrhs, const float* ab, const fortran_int_t ldab,
         const float* afb, const fortran_int_t ldafb,
@@ -75,7 +75,7 @@
 // * double value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gbrfs( Trans, const fortran_int_t n,
+inline std::ptrdiff_t gbrfs( const Trans trans, const fortran_int_t n,
         const fortran_int_t kl, const fortran_int_t ku,
         const fortran_int_t nrhs, const double* ab, const fortran_int_t ldab,
         const double* afb, const fortran_int_t ldafb,
@@ -95,7 +95,7 @@
 // * complex<float> value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gbrfs( Trans, const fortran_int_t n,
+inline std::ptrdiff_t gbrfs( const Trans trans, const fortran_int_t n,
         const fortran_int_t kl, const fortran_int_t ku,
         const fortran_int_t nrhs, const std::complex<float>* ab,
         const fortran_int_t ldab, const std::complex<float>* afb,
@@ -116,7 +116,7 @@
 // * complex<double> value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gbrfs( Trans, const fortran_int_t n,
+inline std::ptrdiff_t gbrfs( const Trans trans, const fortran_int_t n,
         const fortran_int_t kl, const fortran_int_t ku,
         const fortran_int_t nrhs, const std::complex<double>* ab,
         const fortran_int_t ldab, const std::complex<double>* afb,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbtrs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbtrs.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gbtrs.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -50,7 +50,7 @@
 // * float value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gbtrs( Trans, const fortran_int_t n,
+inline std::ptrdiff_t gbtrs( const Trans trans, const fortran_int_t n,
         const fortran_int_t kl, const fortran_int_t ku,
         const fortran_int_t nrhs, const float* ab, const fortran_int_t ldab,
         const fortran_int_t* ipiv, float* b, const fortran_int_t ldb ) {
@@ -66,7 +66,7 @@
 // * double value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gbtrs( Trans, const fortran_int_t n,
+inline std::ptrdiff_t gbtrs( const Trans trans, const fortran_int_t n,
         const fortran_int_t kl, const fortran_int_t ku,
         const fortran_int_t nrhs, const double* ab, const fortran_int_t ldab,
         const fortran_int_t* ipiv, double* b, const fortran_int_t ldb ) {
@@ -82,7 +82,7 @@
 // * complex<float> value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gbtrs( Trans, const fortran_int_t n,
+inline std::ptrdiff_t gbtrs( const Trans trans, const fortran_int_t n,
         const fortran_int_t kl, const fortran_int_t ku,
         const fortran_int_t nrhs, const std::complex<float>* ab,
         const fortran_int_t ldab, const fortran_int_t* ipiv,
@@ -99,7 +99,7 @@
 // * complex<double> value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gbtrs( Trans, const fortran_int_t n,
+inline std::ptrdiff_t gbtrs( const Trans trans, const fortran_int_t n,
         const fortran_int_t kl, const fortran_int_t ku,
         const fortran_int_t nrhs, const std::complex<double>* ab,
         const fortran_int_t ldab, const fortran_int_t* ipiv,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gebak.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gebak.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gebak.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -50,12 +50,14 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * float value-type.
 //
-inline std::ptrdiff_t gebak( const char job, const char side,
+template< typename Side >
+inline std::ptrdiff_t gebak( const char job, const Side side,
         const fortran_int_t n, const fortran_int_t ilo,
         const fortran_int_t ihi, const float* scale, const fortran_int_t m,
         float* v, const fortran_int_t ldv ) {
     fortran_int_t info(0);
-    LAPACK_SGEBAK( &job, &side, &n, &ilo, &ihi, scale, &m, v, &ldv, &info );
+    LAPACK_SGEBAK( &job, &lapack_option< Side >::value, &n, &ilo, &ihi, scale,
+            &m, v, &ldv, &info );
     return info;
 }
 
@@ -64,12 +66,14 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * double value-type.
 //
-inline std::ptrdiff_t gebak( const char job, const char side,
+template< typename Side >
+inline std::ptrdiff_t gebak( const char job, const Side side,
         const fortran_int_t n, const fortran_int_t ilo,
         const fortran_int_t ihi, const double* scale, const fortran_int_t m,
         double* v, const fortran_int_t ldv ) {
     fortran_int_t info(0);
-    LAPACK_DGEBAK( &job, &side, &n, &ilo, &ihi, scale, &m, v, &ldv, &info );
+    LAPACK_DGEBAK( &job, &lapack_option< Side >::value, &n, &ilo, &ihi, scale,
+            &m, v, &ldv, &info );
     return info;
 }
 
@@ -78,12 +82,14 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<float> value-type.
 //
-inline std::ptrdiff_t gebak( const char job, const char side,
+template< typename Side >
+inline std::ptrdiff_t gebak( const char job, const Side side,
         const fortran_int_t n, const fortran_int_t ilo,
         const fortran_int_t ihi, const float* scale, const fortran_int_t m,
         std::complex<float>* v, const fortran_int_t ldv ) {
     fortran_int_t info(0);
-    LAPACK_CGEBAK( &job, &side, &n, &ilo, &ihi, scale, &m, v, &ldv, &info );
+    LAPACK_CGEBAK( &job, &lapack_option< Side >::value, &n, &ilo, &ihi, scale,
+            &m, v, &ldv, &info );
     return info;
 }
 
@@ -92,12 +98,14 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<double> value-type.
 //
-inline std::ptrdiff_t gebak( const char job, const char side,
+template< typename Side >
+inline std::ptrdiff_t gebak( const char job, const Side side,
         const fortran_int_t n, const fortran_int_t ilo,
         const fortran_int_t ihi, const double* scale, const fortran_int_t m,
         std::complex<double>* v, const fortran_int_t ldv ) {
     fortran_int_t info(0);
-    LAPACK_ZGEBAK( &job, &side, &n, &ilo, &ihi, scale, &m, v, &ldv, &info );
+    LAPACK_ZGEBAK( &job, &lapack_option< Side >::value, &n, &ilo, &ihi, scale,
+            &m, v, &ldv, &info );
     return info;
 }
 
@@ -125,8 +133,8 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename VectorSCALE, typename MatrixV >
-    static std::ptrdiff_t invoke( const char job, const char side,
+    template< typename Side, typename VectorSCALE, typename MatrixV >
+    static std::ptrdiff_t invoke( const char job, const Side side,
             const fortran_int_t ilo, const fortran_int_t ihi,
             const VectorSCALE& scale, MatrixV& v ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -143,7 +151,6 @@
         BOOST_ASSERT( bindings::stride_major(v) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(v)) );
         BOOST_ASSERT( job == 'N' || job == 'P' || job == 'S' || job == 'B' );
-        BOOST_ASSERT( side == 'R' || side == 'L' );
         return detail::gebak( job, side, bindings::size_row(v), ilo, ihi,
                 bindings::begin_value(scale), bindings::size_column(v),
                 bindings::begin_value(v), bindings::stride_major(v) );
@@ -166,8 +173,8 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename VectorSCALE, typename MatrixV >
-    static std::ptrdiff_t invoke( const char job, const char side,
+    template< typename Side, typename VectorSCALE, typename MatrixV >
+    static std::ptrdiff_t invoke( const char job, const Side side,
             const fortran_int_t ilo, const fortran_int_t ihi,
             const VectorSCALE& scale, MatrixV& v ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -180,7 +187,6 @@
         BOOST_ASSERT( bindings::stride_major(v) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(v)) );
         BOOST_ASSERT( job == 'N' || job == 'P' || job == 'S' || job == 'B' );
-        BOOST_ASSERT( side == 'R' || side == 'L' );
         return detail::gebak( job, side, bindings::size_row(v), ilo, ihi,
                 bindings::begin_value(scale), bindings::size_column(v),
                 bindings::begin_value(v), bindings::stride_major(v) );
@@ -202,8 +208,8 @@
 // Overloaded function for gebak. Its overload differs for
 // * MatrixV&
 //
-template< typename VectorSCALE, typename MatrixV >
-inline std::ptrdiff_t gebak( const char job, const char side,
+template< typename Side, typename VectorSCALE, typename MatrixV >
+inline std::ptrdiff_t gebak( const char job, const Side side,
         const fortran_int_t ilo, const fortran_int_t ihi,
         const VectorSCALE& scale, MatrixV& v ) {
     return gebak_impl< typename bindings::value_type<
@@ -214,8 +220,8 @@
 // Overloaded function for gebak. Its overload differs for
 // * const MatrixV&
 //
-template< typename VectorSCALE, typename MatrixV >
-inline std::ptrdiff_t gebak( const char job, const char side,
+template< typename Side, typename VectorSCALE, typename MatrixV >
+inline std::ptrdiff_t gebak( const char job, const Side side,
         const fortran_int_t ilo, const fortran_int_t ihi,
         const VectorSCALE& scale, const MatrixV& v ) {
     return gebak_impl< typename bindings::value_type<
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gehrd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gehrd.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gehrd.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -194,8 +194,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
@@ -282,8 +283,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gerfs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gerfs.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gerfs.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -54,7 +54,7 @@
 // * float value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gerfs( Trans, const fortran_int_t n,
+inline std::ptrdiff_t gerfs( const Trans trans, const fortran_int_t n,
         const fortran_int_t nrhs, const float* a, const fortran_int_t lda,
         const float* af, const fortran_int_t ldaf, const fortran_int_t* ipiv,
         const float* b, const fortran_int_t ldb, float* x,
@@ -72,7 +72,7 @@
 // * double value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gerfs( Trans, const fortran_int_t n,
+inline std::ptrdiff_t gerfs( const Trans trans, const fortran_int_t n,
         const fortran_int_t nrhs, const double* a, const fortran_int_t lda,
         const double* af, const fortran_int_t ldaf, const fortran_int_t* ipiv,
         const double* b, const fortran_int_t ldb, double* x,
@@ -90,7 +90,7 @@
 // * complex<float> value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gerfs( Trans, const fortran_int_t n,
+inline std::ptrdiff_t gerfs( const Trans trans, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<float>* a,
         const fortran_int_t lda, const std::complex<float>* af,
         const fortran_int_t ldaf, const fortran_int_t* ipiv,
@@ -109,7 +109,7 @@
 // * complex<double> value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gerfs( Trans, const fortran_int_t n,
+inline std::ptrdiff_t gerfs( const Trans trans, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<double>* a,
         const fortran_int_t lda, const std::complex<double>* af,
         const fortran_int_t ldaf, const fortran_int_t* ipiv,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gerqf.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gerqf.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gerqf.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -194,8 +194,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
@@ -282,8 +283,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/getrs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/getrs.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/getrs.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -58,9 +58,9 @@
 // * float value-type.
 //
 template< typename Order, typename Trans >
-inline std::ptrdiff_t getrs( Order, Trans, const int n, const int nrhs,
-        const float* a, const int lda, const int* ipiv, float* b,
-        const int ldb ) {
+inline std::ptrdiff_t getrs( Order, const Trans trans, const int n,
+        const int nrhs, const float* a, const int lda, const int* ipiv,
+        float* b, const int ldb ) {
     return clapack_sgetrs
    ( clapack_option< Order >::value, clapack_option< Trans >::value, n, nrhs,
            a, lda, ipiv, b, ldb );
@@ -72,9 +72,9 @@
 // * double value-type.
 //
 template< typename Order, typename Trans >
-inline std::ptrdiff_t getrs( Order, Trans, const int n, const int nrhs,
-        const double* a, const int lda, const int* ipiv, double* b,
-        const int ldb ) {
+inline std::ptrdiff_t getrs( Order, const Trans trans, const int n,
+        const int nrhs, const double* a, const int lda, const int* ipiv,
+        double* b, const int ldb ) {
     return clapack_dgetrs
    ( clapack_option< Order >::value, clapack_option< Trans >::value, n, nrhs,
            a, lda, ipiv, b, ldb );
@@ -86,9 +86,9 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename Trans >
-inline std::ptrdiff_t getrs( Order, Trans, const int n, const int nrhs,
-        const std::complex<float>* a, const int lda, const int* ipiv,
-        std::complex<float>* b, const int ldb ) {
+inline std::ptrdiff_t getrs( Order, const Trans trans, const int n,
+        const int nrhs, const std::complex<float>* a, const int lda,
+        const int* ipiv, std::complex<float>* b, const int ldb ) {
     return clapack_cgetrs
    ( clapack_option< Order >::value, clapack_option< Trans >::value, n, nrhs,
            a, lda, ipiv, b, ldb );
@@ -100,9 +100,9 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename Trans >
-inline std::ptrdiff_t getrs( Order, Trans, const int n, const int nrhs,
-        const std::complex<double>* a, const int lda, const int* ipiv,
-        std::complex<double>* b, const int ldb ) {
+inline std::ptrdiff_t getrs( Order, const Trans trans, const int n,
+        const int nrhs, const std::complex<double>* a, const int lda,
+        const int* ipiv, std::complex<double>* b, const int ldb ) {
     return clapack_zgetrs
    ( clapack_option< Order >::value, clapack_option< Trans >::value, n, nrhs,
            a, lda, ipiv, b, ldb );
@@ -115,7 +115,7 @@
 // * float value-type.
 //
 template< typename Order, typename Trans >
-inline std::ptrdiff_t getrs( Order, Trans, const fortran_int_t n,
+inline std::ptrdiff_t getrs( Order, const Trans trans, const fortran_int_t n,
         const fortran_int_t nrhs, const float* a, const fortran_int_t lda,
         const fortran_int_t* ipiv, float* b, const fortran_int_t ldb ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
@@ -131,7 +131,7 @@
 // * double value-type.
 //
 template< typename Order, typename Trans >
-inline std::ptrdiff_t getrs( Order, Trans, const fortran_int_t n,
+inline std::ptrdiff_t getrs( Order, const Trans trans, const fortran_int_t n,
         const fortran_int_t nrhs, const double* a, const fortran_int_t lda,
         const fortran_int_t* ipiv, double* b, const fortran_int_t ldb ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
@@ -147,7 +147,7 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename Trans >
-inline std::ptrdiff_t getrs( Order, Trans, const fortran_int_t n,
+inline std::ptrdiff_t getrs( Order, const Trans trans, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<float>* a,
         const fortran_int_t lda, const fortran_int_t* ipiv,
         std::complex<float>* b, const fortran_int_t ldb ) {
@@ -164,7 +164,7 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename Trans >
-inline std::ptrdiff_t getrs( Order, Trans, const fortran_int_t n,
+inline std::ptrdiff_t getrs( Order, const Trans trans, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<double>* a,
         const fortran_int_t lda, const fortran_int_t* ipiv,
         std::complex<double>* b, const fortran_int_t ldb ) {
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggbak.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggbak.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggbak.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -50,13 +50,14 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * float value-type.
 //
-inline std::ptrdiff_t ggbak( const char job, const char side,
+template< typename Side >
+inline std::ptrdiff_t ggbak( const char job, const Side side,
         const fortran_int_t n, const fortran_int_t ilo,
         const fortran_int_t ihi, const float* lscale, const float* rscale,
         const fortran_int_t m, float* v, const fortran_int_t ldv ) {
     fortran_int_t info(0);
-    LAPACK_SGGBAK( &job, &side, &n, &ilo, &ihi, lscale, rscale, &m, v, &ldv,
-            &info );
+    LAPACK_SGGBAK( &job, &lapack_option< Side >::value, &n, &ilo, &ihi,
+            lscale, rscale, &m, v, &ldv, &info );
     return info;
 }
 
@@ -65,13 +66,14 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * double value-type.
 //
-inline std::ptrdiff_t ggbak( const char job, const char side,
+template< typename Side >
+inline std::ptrdiff_t ggbak( const char job, const Side side,
         const fortran_int_t n, const fortran_int_t ilo,
         const fortran_int_t ihi, const double* lscale, const double* rscale,
         const fortran_int_t m, double* v, const fortran_int_t ldv ) {
     fortran_int_t info(0);
-    LAPACK_DGGBAK( &job, &side, &n, &ilo, &ihi, lscale, rscale, &m, v, &ldv,
-            &info );
+    LAPACK_DGGBAK( &job, &lapack_option< Side >::value, &n, &ilo, &ihi,
+            lscale, rscale, &m, v, &ldv, &info );
     return info;
 }
 
@@ -80,14 +82,15 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<float> value-type.
 //
-inline std::ptrdiff_t ggbak( const char job, const char side,
+template< typename Side >
+inline std::ptrdiff_t ggbak( const char job, const Side side,
         const fortran_int_t n, const fortran_int_t ilo,
         const fortran_int_t ihi, const float* lscale, const float* rscale,
         const fortran_int_t m, std::complex<float>* v,
         const fortran_int_t ldv ) {
     fortran_int_t info(0);
-    LAPACK_CGGBAK( &job, &side, &n, &ilo, &ihi, lscale, rscale, &m, v, &ldv,
-            &info );
+    LAPACK_CGGBAK( &job, &lapack_option< Side >::value, &n, &ilo, &ihi,
+            lscale, rscale, &m, v, &ldv, &info );
     return info;
 }
 
@@ -96,14 +99,15 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<double> value-type.
 //
-inline std::ptrdiff_t ggbak( const char job, const char side,
+template< typename Side >
+inline std::ptrdiff_t ggbak( const char job, const Side side,
         const fortran_int_t n, const fortran_int_t ilo,
         const fortran_int_t ihi, const double* lscale, const double* rscale,
         const fortran_int_t m, std::complex<double>* v,
         const fortran_int_t ldv ) {
     fortran_int_t info(0);
-    LAPACK_ZGGBAK( &job, &side, &n, &ilo, &ihi, lscale, rscale, &m, v, &ldv,
-            &info );
+    LAPACK_ZGGBAK( &job, &lapack_option< Side >::value, &n, &ilo, &ihi,
+            lscale, rscale, &m, v, &ldv, &info );
     return info;
 }
 
@@ -131,8 +135,9 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename VectorLSCALE, typename VectorRSCALE, typename MatrixV >
-    static std::ptrdiff_t invoke( const char job, const char side,
+    template< typename Side, typename VectorLSCALE, typename VectorRSCALE,
+            typename MatrixV >
+    static std::ptrdiff_t invoke( const char job, const Side side,
             const fortran_int_t ilo, const fortran_int_t ihi,
             const VectorLSCALE& lscale, const VectorRSCALE& rscale,
             MatrixV& v ) {
@@ -155,7 +160,6 @@
         BOOST_ASSERT( bindings::stride_major(v) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(v)) );
         BOOST_ASSERT( job == 'N' || job == 'P' || job == 'S' || job == 'B' );
-        BOOST_ASSERT( side == 'R' || side == 'L' );
         return detail::ggbak( job, side, bindings::size_row(v), ilo, ihi,
                 bindings::begin_value(lscale), bindings::begin_value(rscale),
                 bindings::size_column(v), bindings::begin_value(v),
@@ -179,8 +183,9 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename VectorLSCALE, typename VectorRSCALE, typename MatrixV >
-    static std::ptrdiff_t invoke( const char job, const char side,
+    template< typename Side, typename VectorLSCALE, typename VectorRSCALE,
+            typename MatrixV >
+    static std::ptrdiff_t invoke( const char job, const Side side,
             const fortran_int_t ilo, const fortran_int_t ihi,
             const VectorLSCALE& lscale, const VectorRSCALE& rscale,
             MatrixV& v ) {
@@ -199,7 +204,6 @@
         BOOST_ASSERT( bindings::stride_major(v) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(v)) );
         BOOST_ASSERT( job == 'N' || job == 'P' || job == 'S' || job == 'B' );
-        BOOST_ASSERT( side == 'R' || side == 'L' );
         return detail::ggbak( job, side, bindings::size_row(v), ilo, ihi,
                 bindings::begin_value(lscale), bindings::begin_value(rscale),
                 bindings::size_column(v), bindings::begin_value(v),
@@ -222,8 +226,9 @@
 // Overloaded function for ggbak. Its overload differs for
 // * MatrixV&
 //
-template< typename VectorLSCALE, typename VectorRSCALE, typename MatrixV >
-inline std::ptrdiff_t ggbak( const char job, const char side,
+template< typename Side, typename VectorLSCALE, typename VectorRSCALE,
+        typename MatrixV >
+inline std::ptrdiff_t ggbak( const char job, const Side side,
         const fortran_int_t ilo, const fortran_int_t ihi,
         const VectorLSCALE& lscale, const VectorRSCALE& rscale, MatrixV& v ) {
     return ggbak_impl< typename bindings::value_type<
@@ -235,8 +240,9 @@
 // Overloaded function for ggbak. Its overload differs for
 // * const MatrixV&
 //
-template< typename VectorLSCALE, typename VectorRSCALE, typename MatrixV >
-inline std::ptrdiff_t ggbak( const char job, const char side,
+template< typename Side, typename VectorLSCALE, typename VectorRSCALE,
+        typename MatrixV >
+inline std::ptrdiff_t ggbak( const char job, const Side side,
         const fortran_int_t ilo, const fortran_int_t ihi,
         const VectorLSCALE& lscale, const VectorRSCALE& rscale,
         const MatrixV& v ) {
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggbal.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggbal.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggbal.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -215,8 +215,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
@@ -315,8 +316,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggqrf.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggqrf.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggqrf.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -229,8 +229,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
@@ -342,8 +343,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggrqf.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggrqf.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ggrqf.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -229,8 +229,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
@@ -342,8 +343,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gtrfs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gtrfs.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gtrfs.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -54,7 +54,7 @@
 // * float value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gtrfs( Trans, const fortran_int_t n,
+inline std::ptrdiff_t gtrfs( const Trans trans, const fortran_int_t n,
         const fortran_int_t nrhs, const float* dl, const float* d,
         const float* du, const float* dlf, const float* df, const float* duf,
         const float* du2, const fortran_int_t* ipiv, const float* b,
@@ -73,7 +73,7 @@
 // * double value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gtrfs( Trans, const fortran_int_t n,
+inline std::ptrdiff_t gtrfs( const Trans trans, const fortran_int_t n,
         const fortran_int_t nrhs, const double* dl, const double* d,
         const double* du, const double* dlf, const double* df,
         const double* duf, const double* du2, const fortran_int_t* ipiv,
@@ -93,7 +93,7 @@
 // * complex<float> value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gtrfs( Trans, const fortran_int_t n,
+inline std::ptrdiff_t gtrfs( const Trans trans, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<float>* dl,
         const std::complex<float>* d, const std::complex<float>* du,
         const std::complex<float>* dlf, const std::complex<float>* df,
@@ -115,7 +115,7 @@
 // * complex<double> value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gtrfs( Trans, const fortran_int_t n,
+inline std::ptrdiff_t gtrfs( const Trans trans, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<double>* dl,
         const std::complex<double>* d, const std::complex<double>* du,
         const std::complex<double>* dlf, const std::complex<double>* df,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gttrs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gttrs.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/gttrs.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -49,7 +49,7 @@
 // * float value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gttrs( Trans, const fortran_int_t n,
+inline std::ptrdiff_t gttrs( const Trans trans, const fortran_int_t n,
         const fortran_int_t nrhs, const float* dl, const float* d,
         const float* du, const float* du2, const fortran_int_t* ipiv,
         float* b, const fortran_int_t ldb ) {
@@ -65,7 +65,7 @@
 // * double value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gttrs( Trans, const fortran_int_t n,
+inline std::ptrdiff_t gttrs( const Trans trans, const fortran_int_t n,
         const fortran_int_t nrhs, const double* dl, const double* d,
         const double* du, const double* du2, const fortran_int_t* ipiv,
         double* b, const fortran_int_t ldb ) {
@@ -81,7 +81,7 @@
 // * complex<float> value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gttrs( Trans, const fortran_int_t n,
+inline std::ptrdiff_t gttrs( const Trans trans, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<float>* dl,
         const std::complex<float>* d, const std::complex<float>* du,
         const std::complex<float>* du2, const fortran_int_t* ipiv,
@@ -98,7 +98,7 @@
 // * complex<double> value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gttrs( Trans, const fortran_int_t n,
+inline std::ptrdiff_t gttrs( const Trans trans, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<double>* dl,
         const std::complex<double>* d, const std::complex<double>* du,
         const std::complex<double>* du2, const fortran_int_t* ipiv,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hbgst.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hbgst.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hbgst.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,8 +52,8 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hbgst( const char vect, UpLo, const fortran_int_t n,
-        const fortran_int_t ka, const fortran_int_t kb,
+inline std::ptrdiff_t hbgst( const char vect, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t ka, const fortran_int_t kb,
         std::complex<float>* ab, const fortran_int_t ldab,
         const std::complex<float>* bb, const fortran_int_t ldbb,
         std::complex<float>* x, const fortran_int_t ldx,
@@ -70,8 +70,8 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hbgst( const char vect, UpLo, const fortran_int_t n,
-        const fortran_int_t ka, const fortran_int_t kb,
+inline std::ptrdiff_t hbgst( const char vect, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t ka, const fortran_int_t kb,
         std::complex<double>* ab, const fortran_int_t ldab,
         const std::complex<double>* bb, const fortran_int_t ldbb,
         std::complex<double>* x, const fortran_int_t ldx,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hbtrd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hbtrd.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hbtrd.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,10 +52,11 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hbtrd( const char vect, UpLo, const fortran_int_t n,
-        const fortran_int_t kd, std::complex<float>* ab,
-        const fortran_int_t ldab, float* d, float* e, std::complex<float>* q,
-        const fortran_int_t ldq, std::complex<float>* work ) {
+inline std::ptrdiff_t hbtrd( const char vect, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t kd,
+        std::complex<float>* ab, const fortran_int_t ldab, float* d, float* e,
+        std::complex<float>* q, const fortran_int_t ldq,
+        std::complex<float>* work ) {
     fortran_int_t info(0);
     LAPACK_CHBTRD( &vect, &lapack_option< UpLo >::value, &n, &kd, ab, &ldab,
             d, e, q, &ldq, work, &info );
@@ -68,10 +69,10 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hbtrd( const char vect, UpLo, const fortran_int_t n,
-        const fortran_int_t kd, std::complex<double>* ab,
-        const fortran_int_t ldab, double* d, double* e,
-        std::complex<double>* q, const fortran_int_t ldq,
+inline std::ptrdiff_t hbtrd( const char vect, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t kd,
+        std::complex<double>* ab, const fortran_int_t ldab, double* d,
+        double* e, std::complex<double>* q, const fortran_int_t ldq,
         std::complex<double>* work ) {
     fortran_int_t info(0);
     LAPACK_ZHBTRD( &vect, &lapack_option< UpLo >::value, &n, &kd, ab, &ldab,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hecon.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hecon.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hecon.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -51,7 +51,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hecon( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t hecon( const UpLo uplo, const fortran_int_t n,
         const std::complex<float>* a, const fortran_int_t lda,
         const fortran_int_t* ipiv, const float anorm, float& rcond,
         std::complex<float>* work ) {
@@ -67,7 +67,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hecon( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t hecon( const UpLo uplo, const fortran_int_t n,
         const std::complex<double>* a, const fortran_int_t lda,
         const fortran_int_t* ipiv, const double anorm, double& rcond,
         std::complex<double>* work ) {
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hegst.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hegst.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hegst.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -49,7 +49,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hegst( const fortran_int_t itype, UpLo,
+inline std::ptrdiff_t hegst( const fortran_int_t itype, const UpLo uplo,
         const fortran_int_t n, std::complex<float>* a,
         const fortran_int_t lda, const std::complex<float>* b,
         const fortran_int_t ldb ) {
@@ -65,7 +65,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hegst( const fortran_int_t itype, UpLo,
+inline std::ptrdiff_t hegst( const fortran_int_t itype, const UpLo uplo,
         const fortran_int_t n, std::complex<double>* a,
         const fortran_int_t lda, const std::complex<double>* b,
         const fortran_int_t ldb ) {
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/herfs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/herfs.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/herfs.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -51,7 +51,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t herfs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t herfs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<float>* a,
         const fortran_int_t lda, const std::complex<float>* af,
         const fortran_int_t ldaf, const fortran_int_t* ipiv,
@@ -70,7 +70,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t herfs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t herfs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<double>* a,
         const fortran_int_t lda, const std::complex<double>* af,
         const fortran_int_t ldaf, const fortran_int_t* ipiv,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetrd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetrd.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetrd.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,7 +52,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hetrd( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t hetrd( const UpLo uplo, const fortran_int_t n,
         std::complex<float>* a, const fortran_int_t lda, float* d, float* e,
         std::complex<float>* tau, std::complex<float>* work,
         const fortran_int_t lwork ) {
@@ -68,7 +68,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hetrd( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t hetrd( const UpLo uplo, const fortran_int_t n,
         std::complex<double>* a, const fortran_int_t lda, double* d,
         double* e, std::complex<double>* tau, std::complex<double>* work,
         const fortran_int_t lwork ) {
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetrf.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetrf.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetrf.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -51,7 +51,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hetrf( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t hetrf( const UpLo uplo, const fortran_int_t n,
         std::complex<float>* a, const fortran_int_t lda, fortran_int_t* ipiv,
         std::complex<float>* work, const fortran_int_t lwork ) {
     fortran_int_t info(0);
@@ -66,7 +66,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hetrf( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t hetrf( const UpLo uplo, const fortran_int_t n,
         std::complex<double>* a, const fortran_int_t lda, fortran_int_t* ipiv,
         std::complex<double>* work, const fortran_int_t lwork ) {
     fortran_int_t info(0);
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetri.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetri.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetri.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -51,7 +51,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hetri( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t hetri( const UpLo uplo, const fortran_int_t n,
         std::complex<float>* a, const fortran_int_t lda,
         const fortran_int_t* ipiv, std::complex<float>* work ) {
     fortran_int_t info(0);
@@ -66,7 +66,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hetri( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t hetri( const UpLo uplo, const fortran_int_t n,
         std::complex<double>* a, const fortran_int_t lda,
         const fortran_int_t* ipiv, std::complex<double>* work ) {
     fortran_int_t info(0);
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetrs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetrs.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hetrs.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -49,7 +49,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hetrs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t hetrs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<float>* a,
         const fortran_int_t lda, const fortran_int_t* ipiv,
         std::complex<float>* b, const fortran_int_t ldb ) {
@@ -65,7 +65,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hetrs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t hetrs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<double>* a,
         const fortran_int_t lda, const fortran_int_t* ipiv,
         std::complex<double>* b, const fortran_int_t ldb ) {
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hpcon.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hpcon.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hpcon.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -51,7 +51,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hpcon( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t hpcon( const UpLo uplo, const fortran_int_t n,
         const std::complex<float>* ap, const fortran_int_t* ipiv,
         const float anorm, float& rcond, std::complex<float>* work ) {
     fortran_int_t info(0);
@@ -66,7 +66,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hpcon( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t hpcon( const UpLo uplo, const fortran_int_t n,
         const std::complex<double>* ap, const fortran_int_t* ipiv,
         const double anorm, double& rcond, std::complex<double>* work ) {
     fortran_int_t info(0);
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hprfs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hprfs.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hprfs.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -51,7 +51,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hprfs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t hprfs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<float>* ap,
         const std::complex<float>* afp, const fortran_int_t* ipiv,
         const std::complex<float>* b, const fortran_int_t ldb,
@@ -69,7 +69,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hprfs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t hprfs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<double>* ap,
         const std::complex<double>* afp, const fortran_int_t* ipiv,
         const std::complex<double>* b, const fortran_int_t ldb,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hptrd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hptrd.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hptrd.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -49,7 +49,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hptrd( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t hptrd( const UpLo uplo, const fortran_int_t n,
         std::complex<float>* ap, float* d, float* e,
         std::complex<float>* tau ) {
     fortran_int_t info(0);
@@ -63,7 +63,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hptrd( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t hptrd( const UpLo uplo, const fortran_int_t n,
         std::complex<double>* ap, double* d, double* e,
         std::complex<double>* tau ) {
     fortran_int_t info(0);
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hptrf.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hptrf.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hptrf.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -49,7 +49,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hptrf( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t hptrf( const UpLo uplo, const fortran_int_t n,
         std::complex<float>* ap, fortran_int_t* ipiv ) {
     fortran_int_t info(0);
     LAPACK_CHPTRF( &lapack_option< UpLo >::value, &n, ap, ipiv, &info );
@@ -62,7 +62,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hptrf( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t hptrf( const UpLo uplo, const fortran_int_t n,
         std::complex<double>* ap, fortran_int_t* ipiv ) {
     fortran_int_t info(0);
     LAPACK_ZHPTRF( &lapack_option< UpLo >::value, &n, ap, ipiv, &info );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hptri.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hptri.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hptri.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -51,7 +51,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hptri( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t hptri( const UpLo uplo, const fortran_int_t n,
         std::complex<float>* ap, const fortran_int_t* ipiv,
         std::complex<float>* work ) {
     fortran_int_t info(0);
@@ -65,7 +65,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hptri( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t hptri( const UpLo uplo, const fortran_int_t n,
         std::complex<double>* ap, const fortran_int_t* ipiv,
         std::complex<double>* work ) {
     fortran_int_t info(0);
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hptrs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hptrs.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hptrs.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -49,7 +49,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hptrs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t hptrs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<float>* ap,
         const fortran_int_t* ipiv, std::complex<float>* b,
         const fortran_int_t ldb ) {
@@ -65,7 +65,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hptrs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t hptrs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<double>* ap,
         const fortran_int_t* ipiv, std::complex<double>* b,
         const fortran_int_t ldb ) {
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hsein.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hsein.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/hsein.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,15 +52,17 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * float value-type.
 //
-inline std::ptrdiff_t hsein( const char side, const char eigsrc,
+template< typename Side >
+inline std::ptrdiff_t hsein( const Side side, const char eigsrc,
         const char initv, logical_t* select, const fortran_int_t n,
         const float* h, const fortran_int_t ldh, float* wr, const float* wi,
         float* vl, const fortran_int_t ldvl, float* vr,
         const fortran_int_t ldvr, const fortran_int_t mm, fortran_int_t& m,
         float* work, fortran_int_t* ifaill, fortran_int_t* ifailr ) {
     fortran_int_t info(0);
-    LAPACK_SHSEIN( &side, &eigsrc, &initv, select, &n, h, &ldh, wr, wi, vl,
-            &ldvl, vr, &ldvr, &mm, &m, work, ifaill, ifailr, &info );
+    LAPACK_SHSEIN( &lapack_option< Side >::value, &eigsrc, &initv, select, &n,
+            h, &ldh, wr, wi, vl, &ldvl, vr, &ldvr, &mm, &m, work, ifaill,
+            ifailr, &info );
     return info;
 }
 
@@ -69,15 +71,17 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * double value-type.
 //
-inline std::ptrdiff_t hsein( const char side, const char eigsrc,
+template< typename Side >
+inline std::ptrdiff_t hsein( const Side side, const char eigsrc,
         const char initv, logical_t* select, const fortran_int_t n,
         const double* h, const fortran_int_t ldh, double* wr,
         const double* wi, double* vl, const fortran_int_t ldvl, double* vr,
         const fortran_int_t ldvr, const fortran_int_t mm, fortran_int_t& m,
         double* work, fortran_int_t* ifaill, fortran_int_t* ifailr ) {
     fortran_int_t info(0);
-    LAPACK_DHSEIN( &side, &eigsrc, &initv, select, &n, h, &ldh, wr, wi, vl,
-            &ldvl, vr, &ldvr, &mm, &m, work, ifaill, ifailr, &info );
+    LAPACK_DHSEIN( &lapack_option< Side >::value, &eigsrc, &initv, select, &n,
+            h, &ldh, wr, wi, vl, &ldvl, vr, &ldvr, &mm, &m, work, ifaill,
+            ifailr, &info );
     return info;
 }
 
@@ -86,7 +90,8 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<float> value-type.
 //
-inline std::ptrdiff_t hsein( const char side, const char eigsrc,
+template< typename Side >
+inline std::ptrdiff_t hsein( const Side side, const char eigsrc,
         const char initv, const logical_t* select, const fortran_int_t n,
         const std::complex<float>* h, const fortran_int_t ldh,
         std::complex<float>* w, std::complex<float>* vl,
@@ -95,8 +100,9 @@
         std::complex<float>* work, float* rwork, fortran_int_t* ifaill,
         fortran_int_t* ifailr ) {
     fortran_int_t info(0);
-    LAPACK_CHSEIN( &side, &eigsrc, &initv, select, &n, h, &ldh, w, vl, &ldvl,
-            vr, &ldvr, &mm, &m, work, rwork, ifaill, ifailr, &info );
+    LAPACK_CHSEIN( &lapack_option< Side >::value, &eigsrc, &initv, select, &n,
+            h, &ldh, w, vl, &ldvl, vr, &ldvr, &mm, &m, work, rwork, ifaill,
+            ifailr, &info );
     return info;
 }
 
@@ -105,7 +111,8 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<double> value-type.
 //
-inline std::ptrdiff_t hsein( const char side, const char eigsrc,
+template< typename Side >
+inline std::ptrdiff_t hsein( const Side side, const char eigsrc,
         const char initv, const logical_t* select, const fortran_int_t n,
         const std::complex<double>* h, const fortran_int_t ldh,
         std::complex<double>* w, std::complex<double>* vl,
@@ -114,8 +121,9 @@
         std::complex<double>* work, double* rwork, fortran_int_t* ifaill,
         fortran_int_t* ifailr ) {
     fortran_int_t info(0);
-    LAPACK_ZHSEIN( &side, &eigsrc, &initv, select, &n, h, &ldh, w, vl, &ldvl,
-            vr, &ldvr, &mm, &m, work, rwork, ifaill, ifailr, &info );
+    LAPACK_ZHSEIN( &lapack_option< Side >::value, &eigsrc, &initv, select, &n,
+            h, &ldh, w, vl, &ldvl, vr, &ldvr, &mm, &m, work, rwork, ifaill,
+            ifailr, &info );
     return info;
 }
 
@@ -143,10 +151,11 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-            typename VectorWI, typename MatrixVL, typename MatrixVR,
-            typename VectorIFAILL, typename VectorIFAILR, typename WORK >
-    static std::ptrdiff_t invoke( const char side, const char eigsrc,
+    template< typename Side, typename VectorSELECT, typename MatrixH,
+            typename VectorWR, typename VectorWI, typename MatrixVL,
+            typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+            typename WORK >
+    static std::ptrdiff_t invoke( const Side side, const char eigsrc,
             const char initv, VectorSELECT& select, const MatrixH& h,
             VectorWR& wr, const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
             const fortran_int_t mm, fortran_int_t& m,
@@ -195,7 +204,6 @@
                 bindings::size_column(h)) );
         BOOST_ASSERT( eigsrc == 'Q' || eigsrc == 'N' );
         BOOST_ASSERT( initv == 'N' || initv == 'U' );
-        BOOST_ASSERT( side == 'R' || side == 'L' || side == 'B' );
         return detail::hsein( side, eigsrc, initv,
                 bindings::begin_value(select), bindings::size_column(h),
                 bindings::begin_value(h), bindings::stride_major(h),
@@ -213,10 +221,10 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-            typename VectorWI, typename MatrixVL, typename MatrixVR,
-            typename VectorIFAILL, typename VectorIFAILR >
-    static std::ptrdiff_t invoke( const char side, const char eigsrc,
+    template< typename Side, typename VectorSELECT, typename MatrixH,
+            typename VectorWR, typename VectorWI, typename MatrixVL,
+            typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
+    static std::ptrdiff_t invoke( const Side side, const char eigsrc,
             const char initv, VectorSELECT& select, const MatrixH& h,
             VectorWR& wr, const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
             const fortran_int_t mm, fortran_int_t& m,
@@ -236,10 +244,10 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-            typename VectorWI, typename MatrixVL, typename MatrixVR,
-            typename VectorIFAILL, typename VectorIFAILR >
-    static std::ptrdiff_t invoke( const char side, const char eigsrc,
+    template< typename Side, typename VectorSELECT, typename MatrixH,
+            typename VectorWR, typename VectorWI, typename MatrixVL,
+            typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
+    static std::ptrdiff_t invoke( const Side side, const char eigsrc,
             const char initv, VectorSELECT& select, const MatrixH& h,
             VectorWR& wr, const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
             const fortran_int_t mm, fortran_int_t& m,
@@ -274,10 +282,11 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename VectorSELECT, typename MatrixH, typename VectorW,
-            typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-            typename VectorIFAILR, typename WORK, typename RWORK >
-    static std::ptrdiff_t invoke( const char side, const char eigsrc,
+    template< typename Side, typename VectorSELECT, typename MatrixH,
+            typename VectorW, typename MatrixVL, typename MatrixVR,
+            typename VectorIFAILL, typename VectorIFAILR, typename WORK,
+            typename RWORK >
+    static std::ptrdiff_t invoke( const Side side, const char eigsrc,
             const char initv, const VectorSELECT& select, const MatrixH& h,
             VectorW& w, MatrixVL& vl, MatrixVR& vr,
             const fortran_int_t mm, fortran_int_t& m,
@@ -322,7 +331,6 @@
                 bindings::size_column(h)) );
         BOOST_ASSERT( eigsrc == 'Q' || eigsrc == 'N' );
         BOOST_ASSERT( initv == 'N' || initv == 'U' );
-        BOOST_ASSERT( side == 'R' || side == 'L' || side == 'B' );
         return detail::hsein( side, eigsrc, initv,
                 bindings::begin_value(select), bindings::size_column(h),
                 bindings::begin_value(h), bindings::stride_major(h),
@@ -341,10 +349,10 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename VectorSELECT, typename MatrixH, typename VectorW,
-            typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-            typename VectorIFAILR >
-    static std::ptrdiff_t invoke( const char side, const char eigsrc,
+    template< typename Side, typename VectorSELECT, typename MatrixH,
+            typename VectorW, typename MatrixVL, typename MatrixVR,
+            typename VectorIFAILL, typename VectorIFAILR >
+    static std::ptrdiff_t invoke( const Side side, const char eigsrc,
             const char initv, const VectorSELECT& select, const MatrixH& h,
             VectorW& w, MatrixVL& vl, MatrixVR& vr,
             const fortran_int_t mm, fortran_int_t& m,
@@ -366,10 +374,10 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename VectorSELECT, typename MatrixH, typename VectorW,
-            typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-            typename VectorIFAILR >
-    static std::ptrdiff_t invoke( const char side, const char eigsrc,
+    template< typename Side, typename VectorSELECT, typename MatrixH,
+            typename VectorW, typename MatrixVL, typename MatrixVR,
+            typename VectorIFAILL, typename VectorIFAILR >
+    static std::ptrdiff_t invoke( const Side side, const char eigsrc,
             const char initv, const VectorSELECT& select, const MatrixH& h,
             VectorW& w, MatrixVL& vl, MatrixVR& vr,
             const fortran_int_t mm, fortran_int_t& m,
@@ -417,12 +425,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -442,12 +451,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -467,12 +476,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -492,12 +502,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -517,12 +527,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -542,12 +553,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -567,12 +578,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -592,12 +604,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -617,12 +629,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -642,12 +655,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -667,12 +680,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -692,12 +706,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -717,12 +731,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -742,12 +757,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -767,12 +782,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -792,12 +808,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -817,12 +833,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -842,12 +859,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -867,12 +884,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -892,12 +910,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -917,12 +935,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -942,12 +961,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -967,12 +986,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -992,12 +1012,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1017,12 +1037,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1042,12 +1063,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1067,12 +1088,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1092,12 +1114,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1117,12 +1139,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1142,12 +1165,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1167,12 +1190,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1192,12 +1216,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1217,12 +1241,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1242,12 +1267,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1267,12 +1292,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1292,12 +1318,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1317,12 +1343,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1342,12 +1369,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1367,12 +1394,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1392,12 +1420,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1417,12 +1445,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1442,12 +1471,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1467,12 +1496,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1492,12 +1522,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1517,12 +1547,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1542,12 +1573,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1567,12 +1598,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1592,12 +1624,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1617,12 +1649,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1642,12 +1675,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1667,12 +1700,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1692,12 +1726,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1717,12 +1751,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1742,12 +1777,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1767,12 +1802,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1792,12 +1828,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1817,12 +1853,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1842,12 +1879,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1867,12 +1904,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1892,12 +1930,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1917,12 +1955,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1942,12 +1981,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1967,12 +2006,13 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -1992,12 +2032,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2017,12 +2057,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2042,12 +2083,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2067,12 +2108,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2092,12 +2134,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2117,12 +2159,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2142,12 +2185,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2167,12 +2210,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2192,12 +2236,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2217,12 +2261,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2242,12 +2287,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2267,12 +2312,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2292,12 +2338,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2317,12 +2363,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2342,12 +2389,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2367,12 +2414,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2392,12 +2440,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2417,12 +2465,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2442,12 +2491,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2467,12 +2516,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2492,12 +2542,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2517,12 +2567,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2542,12 +2593,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2567,12 +2618,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2592,12 +2644,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2617,12 +2669,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2642,12 +2695,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2667,12 +2720,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2692,12 +2746,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2717,12 +2771,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2742,12 +2797,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2767,12 +2822,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2792,12 +2848,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2817,12 +2873,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2843,12 +2900,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2868,12 +2925,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2894,12 +2952,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2919,12 +2977,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2945,12 +3004,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2970,12 +3029,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -2996,12 +3056,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -3021,12 +3081,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -3047,12 +3108,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -3072,12 +3133,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -3098,12 +3160,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -3123,12 +3185,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -3149,12 +3212,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -3174,12 +3237,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -3200,12 +3264,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -3225,12 +3289,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -3251,12 +3316,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -3276,12 +3341,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -3302,12 +3368,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -3327,12 +3393,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -3353,12 +3420,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -3378,12 +3445,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -3404,12 +3472,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -3429,12 +3497,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -3455,12 +3524,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -3480,12 +3549,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -3506,12 +3576,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -3531,12 +3601,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -3557,12 +3628,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -3582,12 +3653,13 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -3608,12 +3680,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorWR,
-        typename VectorWI, typename MatrixVL, typename MatrixVR,
-        typename VectorIFAILL, typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorWR, typename VectorWI, typename MatrixVL,
+        typename MatrixVR, typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorWR& wr,
         const VectorWI& wi, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m,
@@ -3631,12 +3703,12 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill, VectorIFAILR& ifailr,
@@ -3655,12 +3727,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill, VectorIFAILR& ifailr ) {
@@ -3678,12 +3750,12 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill, VectorIFAILR& ifailr,
@@ -3702,12 +3774,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill, VectorIFAILR& ifailr ) {
@@ -3725,12 +3797,12 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         const MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill, VectorIFAILR& ifailr,
@@ -3749,12 +3821,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         const MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill, VectorIFAILR& ifailr ) {
@@ -3772,12 +3844,12 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         const MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill, VectorIFAILR& ifailr,
@@ -3796,12 +3868,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         const MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill, VectorIFAILR& ifailr ) {
@@ -3819,12 +3891,12 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill, VectorIFAILR& ifailr,
@@ -3843,12 +3915,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill, VectorIFAILR& ifailr ) {
@@ -3866,12 +3938,12 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill, VectorIFAILR& ifailr,
@@ -3890,12 +3962,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill, VectorIFAILR& ifailr ) {
@@ -3913,12 +3985,12 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         const MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill, VectorIFAILR& ifailr,
@@ -3937,12 +4009,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         const MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill, VectorIFAILR& ifailr ) {
@@ -3960,12 +4032,12 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         const MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill, VectorIFAILR& ifailr,
@@ -3984,12 +4056,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         const MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill, VectorIFAILR& ifailr ) {
@@ -4007,12 +4079,12 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -4031,12 +4103,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -4055,12 +4127,12 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -4079,12 +4151,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -4103,12 +4175,12 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         const MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -4127,12 +4199,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         const MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -4151,12 +4223,12 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         const MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -4175,12 +4247,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         const MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -4199,12 +4271,12 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -4223,12 +4295,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -4247,12 +4319,12 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -4271,12 +4343,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -4295,12 +4367,12 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         const MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -4319,12 +4391,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         const MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -4343,12 +4415,12 @@
 // * VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         const MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -4367,12 +4439,12 @@
 // * VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         const MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -4391,12 +4463,12 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill,
@@ -4415,12 +4487,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill,
@@ -4439,12 +4511,12 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill,
@@ -4463,12 +4535,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill,
@@ -4487,12 +4559,12 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         const MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill,
@@ -4511,12 +4583,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         const MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill,
@@ -4535,12 +4607,12 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         const MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill,
@@ -4559,12 +4631,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         const MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill,
@@ -4583,12 +4655,12 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill,
@@ -4607,12 +4679,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill,
@@ -4631,12 +4703,12 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill,
@@ -4655,12 +4727,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill,
@@ -4679,12 +4751,12 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         const MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill,
@@ -4703,12 +4775,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         const MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill,
@@ -4727,12 +4799,12 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         const MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill,
@@ -4751,12 +4823,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         const MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, VectorIFAILL& ifaill,
@@ -4775,12 +4847,12 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -4799,12 +4871,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -4823,12 +4895,12 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -4847,12 +4919,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -4871,12 +4943,12 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         const MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -4895,12 +4967,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         const MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -4919,12 +4991,12 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         const MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -4943,12 +5015,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         const MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -4967,12 +5039,12 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -4991,12 +5063,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -5015,12 +5087,12 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -5039,12 +5111,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -5063,12 +5135,12 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         const MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -5087,12 +5159,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, VectorW& w,
         const MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -5111,12 +5183,12 @@
 // * const VectorIFAILR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         const MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
@@ -5135,12 +5207,12 @@
 // * const VectorIFAILR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixH, typename VectorW,
-        typename MatrixVL, typename MatrixVR, typename VectorIFAILL,
-        typename VectorIFAILR >
+template< typename Side, typename VectorSELECT, typename MatrixH,
+        typename VectorW, typename MatrixVL, typename MatrixVR,
+        typename VectorIFAILL, typename VectorIFAILR >
 inline typename boost::disable_if< detail::is_workspace< VectorIFAILR >,
         std::ptrdiff_t >::type
-hsein( const char side, const char eigsrc, const char initv,
+hsein( const Side side, const char eigsrc, const char initv,
         const VectorSELECT& select, const MatrixH& h, const VectorW& w,
         const MatrixVL& vl, const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, const VectorIFAILL& ifaill,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/larz.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/larz.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/larz.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,12 +52,14 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * float value-type.
 //
-inline std::ptrdiff_t larz( const char side, const fortran_int_t m,
+template< typename Side >
+inline std::ptrdiff_t larz( const Side side, const fortran_int_t m,
         const fortran_int_t n, const fortran_int_t l, const float* v,
         const fortran_int_t incv, const float tau, float* c,
         const fortran_int_t ldc, float* work ) {
     fortran_int_t info(0);
-    LAPACK_SLARZ( &side, &m, &n, &l, v, &incv, &tau, c, &ldc, work );
+    LAPACK_SLARZ( &lapack_option< Side >::value, &m, &n, &l, v, &incv, &tau,
+            c, &ldc, work );
     return info;
 }
 
@@ -66,12 +68,14 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * double value-type.
 //
-inline std::ptrdiff_t larz( const char side, const fortran_int_t m,
+template< typename Side >
+inline std::ptrdiff_t larz( const Side side, const fortran_int_t m,
         const fortran_int_t n, const fortran_int_t l, const double* v,
         const fortran_int_t incv, const double tau, double* c,
         const fortran_int_t ldc, double* work ) {
     fortran_int_t info(0);
-    LAPACK_DLARZ( &side, &m, &n, &l, v, &incv, &tau, c, &ldc, work );
+    LAPACK_DLARZ( &lapack_option< Side >::value, &m, &n, &l, v, &incv, &tau,
+            c, &ldc, work );
     return info;
 }
 
@@ -80,13 +84,15 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<float> value-type.
 //
-inline std::ptrdiff_t larz( const char side, const fortran_int_t m,
+template< typename Side >
+inline std::ptrdiff_t larz( const Side side, const fortran_int_t m,
         const fortran_int_t n, const fortran_int_t l,
         const std::complex<float>* v, const fortran_int_t incv,
         const std::complex<float> tau, std::complex<float>* c,
         const fortran_int_t ldc, std::complex<float>* work ) {
     fortran_int_t info(0);
-    LAPACK_CLARZ( &side, &m, &n, &l, v, &incv, &tau, c, &ldc, work );
+    LAPACK_CLARZ( &lapack_option< Side >::value, &m, &n, &l, v, &incv, &tau,
+            c, &ldc, work );
     return info;
 }
 
@@ -95,13 +101,15 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<double> value-type.
 //
-inline std::ptrdiff_t larz( const char side, const fortran_int_t m,
+template< typename Side >
+inline std::ptrdiff_t larz( const Side side, const fortran_int_t m,
         const fortran_int_t n, const fortran_int_t l,
         const std::complex<double>* v, const fortran_int_t incv,
         const std::complex<double> tau, std::complex<double>* c,
         const fortran_int_t ldc, std::complex<double>* work ) {
     fortran_int_t info(0);
-    LAPACK_ZLARZ( &side, &m, &n, &l, v, &incv, &tau, c, &ldc, work );
+    LAPACK_ZLARZ( &lapack_option< Side >::value, &m, &n, &l, v, &incv, &tau,
+            c, &ldc, work );
     return info;
 }
 
@@ -129,8 +137,9 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename VectorV, typename MatrixC, typename WORK >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t l,
+    template< typename Side, typename VectorV, typename MatrixC,
+            typename WORK >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t l,
             const VectorV& v, const real_type tau, MatrixC& c,
             detail::workspace1< WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -146,7 +155,6 @@
                 bindings::stride_minor(c) == 1 );
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         return detail::larz( side, bindings::size_row(c),
                 bindings::size_column(c), l, bindings::begin_value(v),
                 bindings::stride(v), tau, bindings::begin_value(c),
@@ -161,8 +169,8 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename VectorV, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t l,
+    template< typename Side, typename VectorV, typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t l,
             const VectorV& v, const real_type tau, MatrixC& c,
             minimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -178,8 +186,8 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename VectorV, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t l,
+    template< typename Side, typename VectorV, typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t l,
             const VectorV& v, const real_type tau, MatrixC& c,
             optimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -190,7 +198,8 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
-    static std::ptrdiff_t min_size_work( const char side,
+    template< typename Side >
+    static std::ptrdiff_t min_size_work( const Side side,
             const std::ptrdiff_t m, const std::ptrdiff_t n ) {
         if ( side == 'L' )
             return n;
@@ -214,8 +223,9 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename VectorV, typename MatrixC, typename WORK >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t l,
+    template< typename Side, typename VectorV, typename MatrixC,
+            typename WORK >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t l,
             const VectorV& v, const value_type tau, MatrixC& c,
             detail::workspace1< WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -231,7 +241,6 @@
                 bindings::stride_minor(c) == 1 );
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         return detail::larz( side, bindings::size_row(c),
                 bindings::size_column(c), l, bindings::begin_value(v),
                 bindings::stride(v), tau, bindings::begin_value(c),
@@ -246,8 +255,8 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename VectorV, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t l,
+    template< typename Side, typename VectorV, typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t l,
             const VectorV& v, const value_type tau, MatrixC& c,
             minimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -263,8 +272,8 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename VectorV, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t l,
+    template< typename Side, typename VectorV, typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t l,
             const VectorV& v, const value_type tau, MatrixC& c,
             optimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -275,7 +284,8 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
-    static std::ptrdiff_t min_size_work( const char side,
+    template< typename Side >
+    static std::ptrdiff_t min_size_work( const Side side,
             const std::ptrdiff_t m, const std::ptrdiff_t n ) {
         if ( side == 'L' )
             return n;
@@ -299,10 +309,11 @@
 // * MatrixC&
 // * User-defined workspace
 //
-template< typename VectorV, typename MatrixC, typename Workspace >
+template< typename Side, typename VectorV, typename MatrixC,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-larz( const char side, const fortran_int_t l, const VectorV& v,
+larz( const Side side, const fortran_int_t l, const VectorV& v,
         const typename remove_imaginary< typename bindings::value_type<
         VectorV >::type >::type tau, MatrixC& c, Workspace work ) {
     return larz_impl< typename bindings::value_type<
@@ -314,10 +325,10 @@
 // * MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename VectorV, typename MatrixC >
+template< typename Side, typename VectorV, typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-larz( const char side, const fortran_int_t l, const VectorV& v,
+larz( const Side side, const fortran_int_t l, const VectorV& v,
         const typename remove_imaginary< typename bindings::value_type<
         VectorV >::type >::type tau, MatrixC& c ) {
     return larz_impl< typename bindings::value_type<
@@ -330,10 +341,11 @@
 // * const MatrixC&
 // * User-defined workspace
 //
-template< typename VectorV, typename MatrixC, typename Workspace >
+template< typename Side, typename VectorV, typename MatrixC,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-larz( const char side, const fortran_int_t l, const VectorV& v,
+larz( const Side side, const fortran_int_t l, const VectorV& v,
         const typename remove_imaginary< typename bindings::value_type<
         VectorV >::type >::type tau, const MatrixC& c, Workspace work ) {
     return larz_impl< typename bindings::value_type<
@@ -345,10 +357,10 @@
 // * const MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename VectorV, typename MatrixC >
+template< typename Side, typename VectorV, typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-larz( const char side, const fortran_int_t l, const VectorV& v,
+larz( const Side side, const fortran_int_t l, const VectorV& v,
         const typename remove_imaginary< typename bindings::value_type<
         VectorV >::type >::type tau, const MatrixC& c ) {
     return larz_impl< typename bindings::value_type<
@@ -360,10 +372,11 @@
 // * MatrixC&
 // * User-defined workspace
 //
-template< typename VectorV, typename MatrixC, typename Workspace >
+template< typename Side, typename VectorV, typename MatrixC,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-larz( const char side, const fortran_int_t l, const VectorV& v,
+larz( const Side side, const fortran_int_t l, const VectorV& v,
         const typename bindings::value_type< VectorV >::type tau, MatrixC& c,
         Workspace work ) {
     return larz_impl< typename bindings::value_type<
@@ -375,10 +388,10 @@
 // * MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename VectorV, typename MatrixC >
+template< typename Side, typename VectorV, typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-larz( const char side, const fortran_int_t l, const VectorV& v,
+larz( const Side side, const fortran_int_t l, const VectorV& v,
         const typename bindings::value_type< VectorV >::type tau,
         MatrixC& c ) {
     return larz_impl< typename bindings::value_type<
@@ -391,10 +404,11 @@
 // * const MatrixC&
 // * User-defined workspace
 //
-template< typename VectorV, typename MatrixC, typename Workspace >
+template< typename Side, typename VectorV, typename MatrixC,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-larz( const char side, const fortran_int_t l, const VectorV& v,
+larz( const Side side, const fortran_int_t l, const VectorV& v,
         const typename bindings::value_type< VectorV >::type tau,
         const MatrixC& c, Workspace work ) {
     return larz_impl< typename bindings::value_type<
@@ -406,10 +420,10 @@
 // * const MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename VectorV, typename MatrixC >
+template< typename Side, typename VectorV, typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-larz( const char side, const fortran_int_t l, const VectorV& v,
+larz( const Side side, const fortran_int_t l, const VectorV& v,
         const typename bindings::value_type< VectorV >::type tau,
         const MatrixC& c ) {
     return larz_impl< typename bindings::value_type<
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/latrd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/latrd.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/latrd.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,7 +52,7 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t latrd( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t latrd( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nb, float* a, const fortran_int_t lda, float* e,
         float* tau, float* w, const fortran_int_t ldw ) {
     fortran_int_t info(0);
@@ -67,7 +67,7 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t latrd( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t latrd( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nb, double* a, const fortran_int_t lda, double* e,
         double* tau, double* w, const fortran_int_t ldw ) {
     fortran_int_t info(0);
@@ -82,7 +82,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t latrd( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t latrd( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nb, std::complex<float>* a,
         const fortran_int_t lda, float* e, std::complex<float>* tau,
         std::complex<float>* w, const fortran_int_t ldw ) {
@@ -98,7 +98,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t latrd( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t latrd( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nb, std::complex<double>* a,
         const fortran_int_t lda, double* e, std::complex<double>* tau,
         std::complex<double>* w, const fortran_int_t ldw ) {
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/latrs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/latrs.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/latrs.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -54,9 +54,10 @@
 // * float value-type.
 //
 template< typename Trans, typename Diag >
-inline std::ptrdiff_t latrs( const char uplo, Trans, Diag, const char normin,
-        const fortran_int_t n, const float* a, const fortran_int_t lda,
-        float* x, float& scale, float* cnorm ) {
+inline std::ptrdiff_t latrs( const char uplo, const Trans trans,
+        const Diag diag, const char normin, const fortran_int_t n,
+        const float* a, const fortran_int_t lda, float* x, float& scale,
+        float* cnorm ) {
     fortran_int_t info(0);
     LAPACK_SLATRS( &uplo, &lapack_option< Trans >::value, &lapack_option<
             Diag >::value, &normin, &n, a, &lda, x, &scale, cnorm, &info );
@@ -69,9 +70,10 @@
 // * double value-type.
 //
 template< typename Trans, typename Diag >
-inline std::ptrdiff_t latrs( const char uplo, Trans, Diag, const char normin,
-        const fortran_int_t n, const double* a, const fortran_int_t lda,
-        double* x, double& scale, double* cnorm ) {
+inline std::ptrdiff_t latrs( const char uplo, const Trans trans,
+        const Diag diag, const char normin, const fortran_int_t n,
+        const double* a, const fortran_int_t lda, double* x, double& scale,
+        double* cnorm ) {
     fortran_int_t info(0);
     LAPACK_DLATRS( &uplo, &lapack_option< Trans >::value, &lapack_option<
             Diag >::value, &normin, &n, a, &lda, x, &scale, cnorm, &info );
@@ -84,10 +86,10 @@
 // * complex<float> value-type.
 //
 template< typename Trans, typename Diag >
-inline std::ptrdiff_t latrs( const char uplo, Trans, Diag, const char normin,
-        const fortran_int_t n, const std::complex<float>* a,
-        const fortran_int_t lda, std::complex<float>* x, float& scale,
-        float* cnorm ) {
+inline std::ptrdiff_t latrs( const char uplo, const Trans trans,
+        const Diag diag, const char normin, const fortran_int_t n,
+        const std::complex<float>* a, const fortran_int_t lda,
+        std::complex<float>* x, float& scale, float* cnorm ) {
     fortran_int_t info(0);
     LAPACK_CLATRS( &uplo, &lapack_option< Trans >::value, &lapack_option<
             Diag >::value, &normin, &n, a, &lda, x, &scale, cnorm, &info );
@@ -100,10 +102,10 @@
 // * complex<double> value-type.
 //
 template< typename Trans, typename Diag >
-inline std::ptrdiff_t latrs( const char uplo, Trans, Diag, const char normin,
-        const fortran_int_t n, const std::complex<double>* a,
-        const fortran_int_t lda, std::complex<double>* x, double& scale,
-        double* cnorm ) {
+inline std::ptrdiff_t latrs( const char uplo, const Trans trans,
+        const Diag diag, const char normin, const fortran_int_t n,
+        const std::complex<double>* a, const fortran_int_t lda,
+        std::complex<double>* x, double& scale, double* cnorm ) {
     fortran_int_t info(0);
     LAPACK_ZLATRS( &uplo, &lapack_option< Trans >::value, &lapack_option<
             Diag >::value, &normin, &n, a, &lda, x, &scale, cnorm, &info );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/opmtr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/opmtr.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/opmtr.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -51,13 +51,14 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * float value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t opmtr( const char side, const char uplo, Trans,
-        const fortran_int_t m, const fortran_int_t n, const float* ap,
-        const float* tau, float* c, const fortran_int_t ldc, float* work ) {
+template< typename Side, typename Trans >
+inline std::ptrdiff_t opmtr( const Side side, const char uplo,
+        const Trans trans, const fortran_int_t m, const fortran_int_t n,
+        const float* ap, const float* tau, float* c, const fortran_int_t ldc,
+        float* work ) {
     fortran_int_t info(0);
-    LAPACK_SOPMTR( &side, &uplo, &lapack_option< Trans >::value, &m, &n, ap,
-            tau, c, &ldc, work, &info );
+    LAPACK_SOPMTR( &lapack_option< Side >::value, &uplo, &lapack_option<
+            Trans >::value, &m, &n, ap, tau, c, &ldc, work, &info );
     return info;
 }
 
@@ -66,13 +67,14 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * double value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t opmtr( const char side, const char uplo, Trans,
-        const fortran_int_t m, const fortran_int_t n, const double* ap,
-        const double* tau, double* c, const fortran_int_t ldc, double* work ) {
+template< typename Side, typename Trans >
+inline std::ptrdiff_t opmtr( const Side side, const char uplo,
+        const Trans trans, const fortran_int_t m, const fortran_int_t n,
+        const double* ap, const double* tau, double* c,
+        const fortran_int_t ldc, double* work ) {
     fortran_int_t info(0);
-    LAPACK_DOPMTR( &side, &uplo, &lapack_option< Trans >::value, &m, &n, ap,
-            tau, c, &ldc, work, &info );
+    LAPACK_DOPMTR( &lapack_option< Side >::value, &uplo, &lapack_option<
+            Trans >::value, &m, &n, ap, tau, c, &ldc, work, &info );
     return info;
 }
 
@@ -94,9 +96,9 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename VectorAP, typename VectorTAU, typename MatrixC,
-            typename WORK >
-    static std::ptrdiff_t invoke( const char side, const char uplo,
+    template< typename Side, typename VectorAP, typename VectorTAU,
+            typename MatrixC, typename WORK >
+    static std::ptrdiff_t invoke( const Side side, const char uplo,
             const VectorAP& ap, const VectorTAU& tau, MatrixC& c,
             detail::workspace1< WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -118,7 +120,6 @@
         BOOST_ASSERT( bindings::size_row(c) >= 0 );
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         return detail::opmtr( side, uplo, trans(), bindings::size_row(c),
                 bindings::size_column(c), bindings::begin_value(ap),
                 bindings::begin_value(tau), bindings::begin_value(c),
@@ -133,8 +134,9 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename VectorAP, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const char uplo,
+    template< typename Side, typename VectorAP, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const char uplo,
             const VectorAP& ap, const VectorTAU& tau, MatrixC& c,
             minimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -150,8 +152,9 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename VectorAP, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const char uplo,
+    template< typename Side, typename VectorAP, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const char uplo,
             const VectorAP& ap, const VectorTAU& tau, MatrixC& c,
             optimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -162,7 +165,8 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
-    static std::ptrdiff_t min_size_work( const char side,
+    template< typename Side >
+    static std::ptrdiff_t min_size_work( const Side side,
             const std::ptrdiff_t m, const std::ptrdiff_t n ) {
         if ( side == 'L' )
             return n;
@@ -186,11 +190,11 @@
 // * MatrixC&
 // * User-defined workspace
 //
-template< typename VectorAP, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename VectorAP, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-opmtr( const char side, const char uplo, const VectorAP& ap,
+opmtr( const Side side, const char uplo, const VectorAP& ap,
         const VectorTAU& tau, MatrixC& c, Workspace work ) {
     return opmtr_impl< typename bindings::value_type<
             VectorAP >::type >::invoke( side, uplo, ap, tau, c, work );
@@ -201,10 +205,11 @@
 // * MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename VectorAP, typename VectorTAU, typename MatrixC >
+template< typename Side, typename VectorAP, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-opmtr( const char side, const char uplo, const VectorAP& ap,
+opmtr( const Side side, const char uplo, const VectorAP& ap,
         const VectorTAU& tau, MatrixC& c ) {
     return opmtr_impl< typename bindings::value_type<
             VectorAP >::type >::invoke( side, uplo, ap, tau, c,
@@ -216,11 +221,11 @@
 // * const MatrixC&
 // * User-defined workspace
 //
-template< typename VectorAP, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename VectorAP, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-opmtr( const char side, const char uplo, const VectorAP& ap,
+opmtr( const Side side, const char uplo, const VectorAP& ap,
         const VectorTAU& tau, const MatrixC& c, Workspace work ) {
     return opmtr_impl< typename bindings::value_type<
             VectorAP >::type >::invoke( side, uplo, ap, tau, c, work );
@@ -231,10 +236,11 @@
 // * const MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename VectorAP, typename VectorTAU, typename MatrixC >
+template< typename Side, typename VectorAP, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-opmtr( const char side, const char uplo, const VectorAP& ap,
+opmtr( const Side side, const char uplo, const VectorAP& ap,
         const VectorTAU& tau, const MatrixC& c ) {
     return opmtr_impl< typename bindings::value_type<
             VectorAP >::type >::invoke( side, uplo, ap, tau, c,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orghr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orghr.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orghr.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -156,8 +156,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orgtr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orgtr.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/orgtr.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,7 +52,7 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t orgtr( UpLo, const fortran_int_t n, float* a,
+inline std::ptrdiff_t orgtr( const UpLo uplo, const fortran_int_t n, float* a,
         const fortran_int_t lda, const float* tau, float* work,
         const fortran_int_t lwork ) {
     fortran_int_t info(0);
@@ -67,7 +67,7 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t orgtr( UpLo, const fortran_int_t n, double* a,
+inline std::ptrdiff_t orgtr( const UpLo uplo, const fortran_int_t n, double* a,
         const fortran_int_t lda, const double* tau, double* work,
         const fortran_int_t lwork ) {
     fortran_int_t info(0);
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormbr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormbr.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormbr.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -17,6 +17,7 @@
 #include <boost/assert.hpp>
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/detail/array.hpp>
+#include <boost/numeric/bindings/detail/if_left.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/lapack/workspace.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
@@ -51,14 +52,16 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * float value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t ormbr( const char vect, const char side, Trans,
-        const fortran_int_t m, const fortran_int_t n, const fortran_int_t k,
-        const float* a, const fortran_int_t lda, const float* tau, float* c,
-        const fortran_int_t ldc, float* work, const fortran_int_t lwork ) {
+template< typename Side, typename Trans >
+inline std::ptrdiff_t ormbr( const char vect, const Side side,
+        const Trans trans, const fortran_int_t m, const fortran_int_t n,
+        const fortran_int_t k, const float* a, const fortran_int_t lda,
+        const float* tau, float* c, const fortran_int_t ldc, float* work,
+        const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_SORMBR( &vect, &side, &lapack_option< Trans >::value, &m, &n, &k,
-            a, &lda, tau, c, &ldc, work, &lwork, &info );
+    LAPACK_SORMBR( &vect, &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork,
+            &info );
     return info;
 }
 
@@ -67,15 +70,16 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * double value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t ormbr( const char vect, const char side, Trans,
-        const fortran_int_t m, const fortran_int_t n, const fortran_int_t k,
-        const double* a, const fortran_int_t lda, const double* tau,
-        double* c, const fortran_int_t ldc, double* work,
+template< typename Side, typename Trans >
+inline std::ptrdiff_t ormbr( const char vect, const Side side,
+        const Trans trans, const fortran_int_t m, const fortran_int_t n,
+        const fortran_int_t k, const double* a, const fortran_int_t lda,
+        const double* tau, double* c, const fortran_int_t ldc, double* work,
         const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_DORMBR( &vect, &side, &lapack_option< Trans >::value, &m, &n, &k,
-            a, &lda, tau, c, &ldc, work, &lwork, &info );
+    LAPACK_DORMBR( &vect, &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork,
+            &info );
     return info;
 }
 
@@ -97,9 +101,9 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC,
-            typename WORK >
-    static std::ptrdiff_t invoke( const char vect, const char side,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC, typename WORK >
+    static std::ptrdiff_t invoke( const char vect, const Side side,
             const fortran_int_t k, const MatrixA& a, const VectorTAU& tau,
             MatrixC& c, detail::workspace1< WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -127,7 +131,6 @@
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
         BOOST_ASSERT( k >= 0 );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         BOOST_ASSERT( vect == 'Q' || vect == 'P' );
         return detail::ormbr( vect, side, trans(), bindings::size_row(c),
                 bindings::size_column(c), k, bindings::begin_value(a),
@@ -144,8 +147,9 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char vect, const char side,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const char vect, const Side side,
             const fortran_int_t k, const MatrixA& a, const VectorTAU& tau,
             MatrixC& c, minimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -162,8 +166,9 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char vect, const char side,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const char vect, const Side side,
             const fortran_int_t k, const MatrixA& a, const VectorTAU& tau,
             MatrixC& c, optimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -183,12 +188,11 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
-    static std::ptrdiff_t min_size_work( const char side,
+    template< typename Side >
+    static std::ptrdiff_t min_size_work( const Side side,
             const std::ptrdiff_t m, const std::ptrdiff_t n ) {
-        if ( side == 'L' )
-            return std::max< std::ptrdiff_t >( 1, n );
-        else
-            return std::max< std::ptrdiff_t >( 1, m );
+        return std::max< std::ptrdiff_t >( 1, bindings::detail::if_left( side,
+                n, m ) );
     }
 };
 
@@ -207,11 +211,11 @@
 // * MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-ormbr( const char vect, const char side, const fortran_int_t k,
+ormbr( const char vect, const Side side, const fortran_int_t k,
         const MatrixA& a, const VectorTAU& tau, MatrixC& c, Workspace work ) {
     return ormbr_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( vect, side, k, a, tau, c, work );
@@ -222,10 +226,11 @@
 // * MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-ormbr( const char vect, const char side, const fortran_int_t k,
+ormbr( const char vect, const Side side, const fortran_int_t k,
         const MatrixA& a, const VectorTAU& tau, MatrixC& c ) {
     return ormbr_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( vect, side, k, a, tau, c,
@@ -237,11 +242,11 @@
 // * const MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-ormbr( const char vect, const char side, const fortran_int_t k,
+ormbr( const char vect, const Side side, const fortran_int_t k,
         const MatrixA& a, const VectorTAU& tau, const MatrixC& c,
         Workspace work ) {
     return ormbr_impl< typename bindings::value_type<
@@ -253,10 +258,11 @@
 // * const MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-ormbr( const char vect, const char side, const fortran_int_t k,
+ormbr( const char vect, const Side side, const fortran_int_t k,
         const MatrixA& a, const VectorTAU& tau, const MatrixC& c ) {
     return ormbr_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( vect, side, k, a, tau, c,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormhr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormhr.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormhr.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -17,6 +17,7 @@
 #include <boost/assert.hpp>
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/detail/array.hpp>
+#include <boost/numeric/bindings/detail/if_left.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/lapack/workspace.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
@@ -51,15 +52,16 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * float value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t ormhr( const char side, Trans, const fortran_int_t m,
-        const fortran_int_t n, const fortran_int_t ilo,
+template< typename Side, typename Trans >
+inline std::ptrdiff_t ormhr( const Side side, const Trans trans,
+        const fortran_int_t m, const fortran_int_t n, const fortran_int_t ilo,
         const fortran_int_t ihi, const float* a, const fortran_int_t lda,
         const float* tau, float* c, const fortran_int_t ldc, float* work,
         const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_SORMHR( &side, &lapack_option< Trans >::value, &m, &n, &ilo, &ihi,
-            a, &lda, tau, c, &ldc, work, &lwork, &info );
+    LAPACK_SORMHR( &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &m, &n, &ilo, &ihi, a, &lda, tau, c, &ldc, work,
+            &lwork, &info );
     return info;
 }
 
@@ -68,15 +70,16 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * double value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t ormhr( const char side, Trans, const fortran_int_t m,
-        const fortran_int_t n, const fortran_int_t ilo,
+template< typename Side, typename Trans >
+inline std::ptrdiff_t ormhr( const Side side, const Trans trans,
+        const fortran_int_t m, const fortran_int_t n, const fortran_int_t ilo,
         const fortran_int_t ihi, const double* a, const fortran_int_t lda,
         const double* tau, double* c, const fortran_int_t ldc, double* work,
         const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_DORMHR( &side, &lapack_option< Trans >::value, &m, &n, &ilo, &ihi,
-            a, &lda, tau, c, &ldc, work, &lwork, &info );
+    LAPACK_DORMHR( &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &m, &n, &ilo, &ihi, a, &lda, tau, c, &ldc, work,
+            &lwork, &info );
     return info;
 }
 
@@ -98,9 +101,9 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC,
-            typename WORK >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t ilo,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC, typename WORK >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t ilo,
             const fortran_int_t ihi, const MatrixA& a,
             const VectorTAU& tau, MatrixC& c, detail::workspace1<
             WORK > work ) {
@@ -126,7 +129,6 @@
         BOOST_ASSERT( bindings::size_row(c) >= 0 );
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         return detail::ormhr( side, trans(), bindings::size_row(c),
                 bindings::size_column(c), ilo, ihi, bindings::begin_value(a),
                 bindings::stride_major(a), bindings::begin_value(tau),
@@ -142,8 +144,9 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t ilo,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t ilo,
             const fortran_int_t ihi, const MatrixA& a,
             const VectorTAU& tau, MatrixC& c, minimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -160,8 +163,9 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t ilo,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t ilo,
             const fortran_int_t ihi, const MatrixA& a,
             const VectorTAU& tau, MatrixC& c, optimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -181,12 +185,11 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
-    static std::ptrdiff_t min_size_work( const char side,
+    template< typename Side >
+    static std::ptrdiff_t min_size_work( const Side side,
             const std::ptrdiff_t m, const std::ptrdiff_t n ) {
-        if ( side == 'L' )
-            return std::max< std::ptrdiff_t >( 1, n );
-        else
-            return std::max< std::ptrdiff_t >( 1, m );
+        return std::max< std::ptrdiff_t >( 1, bindings::detail::if_left( side,
+                n, m ) );
     }
 };
 
@@ -205,11 +208,11 @@
 // * MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-ormhr( const char side, const fortran_int_t ilo,
+ormhr( const Side side, const fortran_int_t ilo,
         const fortran_int_t ihi, const MatrixA& a, const VectorTAU& tau,
         MatrixC& c, Workspace work ) {
     return ormhr_impl< typename bindings::value_type<
@@ -221,10 +224,11 @@
 // * MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-ormhr( const char side, const fortran_int_t ilo,
+ormhr( const Side side, const fortran_int_t ilo,
         const fortran_int_t ihi, const MatrixA& a, const VectorTAU& tau,
         MatrixC& c ) {
     return ormhr_impl< typename bindings::value_type<
@@ -237,11 +241,11 @@
 // * const MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-ormhr( const char side, const fortran_int_t ilo,
+ormhr( const Side side, const fortran_int_t ilo,
         const fortran_int_t ihi, const MatrixA& a, const VectorTAU& tau,
         const MatrixC& c, Workspace work ) {
     return ormhr_impl< typename bindings::value_type<
@@ -253,10 +257,11 @@
 // * const MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-ormhr( const char side, const fortran_int_t ilo,
+ormhr( const Side side, const fortran_int_t ilo,
         const fortran_int_t ihi, const MatrixA& a, const VectorTAU& tau,
         const MatrixC& c ) {
     return ormhr_impl< typename bindings::value_type<
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormlq.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormlq.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormlq.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -17,6 +17,7 @@
 #include <boost/assert.hpp>
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/detail/array.hpp>
+#include <boost/numeric/bindings/detail/if_left.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/lapack/workspace.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
@@ -51,14 +52,15 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * float value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t ormlq( const char side, Trans, const fortran_int_t m,
-        const fortran_int_t n, const fortran_int_t k, const float* a,
-        const fortran_int_t lda, const float* tau, float* c,
+template< typename Side, typename Trans >
+inline std::ptrdiff_t ormlq( const Side side, const Trans trans,
+        const fortran_int_t m, const fortran_int_t n, const fortran_int_t k,
+        const float* a, const fortran_int_t lda, const float* tau, float* c,
         const fortran_int_t ldc, float* work, const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_SORMLQ( &side, &lapack_option< Trans >::value, &m, &n, &k, a, &lda,
-            tau, c, &ldc, work, &lwork, &info );
+    LAPACK_SORMLQ( &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork,
+            &info );
     return info;
 }
 
@@ -67,14 +69,16 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * double value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t ormlq( const char side, Trans, const fortran_int_t m,
-        const fortran_int_t n, const fortran_int_t k, const double* a,
-        const fortran_int_t lda, const double* tau, double* c,
-        const fortran_int_t ldc, double* work, const fortran_int_t lwork ) {
+template< typename Side, typename Trans >
+inline std::ptrdiff_t ormlq( const Side side, const Trans trans,
+        const fortran_int_t m, const fortran_int_t n, const fortran_int_t k,
+        const double* a, const fortran_int_t lda, const double* tau,
+        double* c, const fortran_int_t ldc, double* work,
+        const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_DORMLQ( &side, &lapack_option< Trans >::value, &m, &n, &k, a, &lda,
-            tau, c, &ldc, work, &lwork, &info );
+    LAPACK_DORMLQ( &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork,
+            &info );
     return info;
 }
 
@@ -96,9 +100,9 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC,
-            typename WORK >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t k,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC, typename WORK >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
             const MatrixA& a, const VectorTAU& tau, MatrixC& c,
             detail::workspace1< WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -126,7 +130,6 @@
                 k) );
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         return detail::ormlq( side, trans(), bindings::size_row(c),
                 bindings::size_column(c), k, bindings::begin_value(a),
                 bindings::stride_major(a), bindings::begin_value(tau),
@@ -142,8 +145,9 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t k,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
             const MatrixA& a, const VectorTAU& tau, MatrixC& c,
             minimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -160,8 +164,9 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t k,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
             const MatrixA& a, const VectorTAU& tau, MatrixC& c,
             optimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -181,12 +186,11 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
-    static std::ptrdiff_t min_size_work( const char side,
+    template< typename Side >
+    static std::ptrdiff_t min_size_work( const Side side,
             const std::ptrdiff_t m, const std::ptrdiff_t n ) {
-        if ( side == 'L' )
-            return std::max< std::ptrdiff_t >( 1, n );
-        else
-            return std::max< std::ptrdiff_t >( 1, m );
+        return std::max< std::ptrdiff_t >( 1, bindings::detail::if_left( side,
+                n, m ) );
     }
 };
 
@@ -205,11 +209,11 @@
 // * MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-ormlq( const char side, const fortran_int_t k, const MatrixA& a,
+ormlq( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, MatrixC& c, Workspace work ) {
     return ormlq_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c, work );
@@ -220,10 +224,11 @@
 // * MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-ormlq( const char side, const fortran_int_t k, const MatrixA& a,
+ormlq( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, MatrixC& c ) {
     return ormlq_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c,
@@ -235,11 +240,11 @@
 // * const MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-ormlq( const char side, const fortran_int_t k, const MatrixA& a,
+ormlq( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, const MatrixC& c, Workspace work ) {
     return ormlq_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c, work );
@@ -250,10 +255,11 @@
 // * const MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-ormlq( const char side, const fortran_int_t k, const MatrixA& a,
+ormlq( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, const MatrixC& c ) {
     return ormlq_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormql.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormql.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormql.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -17,6 +17,7 @@
 #include <boost/assert.hpp>
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/detail/array.hpp>
+#include <boost/numeric/bindings/detail/if_left.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/lapack/workspace.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
@@ -51,14 +52,15 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * float value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t ormql( const char side, Trans, const fortran_int_t m,
-        const fortran_int_t n, const fortran_int_t k, const float* a,
-        const fortran_int_t lda, const float* tau, float* c,
+template< typename Side, typename Trans >
+inline std::ptrdiff_t ormql( const Side side, const Trans trans,
+        const fortran_int_t m, const fortran_int_t n, const fortran_int_t k,
+        const float* a, const fortran_int_t lda, const float* tau, float* c,
         const fortran_int_t ldc, float* work, const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_SORMQL( &side, &lapack_option< Trans >::value, &m, &n, &k, a, &lda,
-            tau, c, &ldc, work, &lwork, &info );
+    LAPACK_SORMQL( &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork,
+            &info );
     return info;
 }
 
@@ -67,14 +69,16 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * double value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t ormql( const char side, Trans, const fortran_int_t m,
-        const fortran_int_t n, const fortran_int_t k, const double* a,
-        const fortran_int_t lda, const double* tau, double* c,
-        const fortran_int_t ldc, double* work, const fortran_int_t lwork ) {
+template< typename Side, typename Trans >
+inline std::ptrdiff_t ormql( const Side side, const Trans trans,
+        const fortran_int_t m, const fortran_int_t n, const fortran_int_t k,
+        const double* a, const fortran_int_t lda, const double* tau,
+        double* c, const fortran_int_t ldc, double* work,
+        const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_DORMQL( &side, &lapack_option< Trans >::value, &m, &n, &k, a, &lda,
-            tau, c, &ldc, work, &lwork, &info );
+    LAPACK_DORMQL( &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork,
+            &info );
     return info;
 }
 
@@ -96,9 +100,9 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC,
-            typename WORK >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t k,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC, typename WORK >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
             const MatrixA& a, const VectorTAU& tau, MatrixC& c,
             detail::workspace1< WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -124,7 +128,6 @@
         BOOST_ASSERT( bindings::size_row(c) >= 0 );
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         return detail::ormql( side, trans(), bindings::size_row(c),
                 bindings::size_column(c), k, bindings::begin_value(a),
                 bindings::stride_major(a), bindings::begin_value(tau),
@@ -140,8 +143,9 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t k,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
             const MatrixA& a, const VectorTAU& tau, MatrixC& c,
             minimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -158,8 +162,9 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t k,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
             const MatrixA& a, const VectorTAU& tau, MatrixC& c,
             optimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -179,12 +184,11 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
-    static std::ptrdiff_t min_size_work( const char side,
+    template< typename Side >
+    static std::ptrdiff_t min_size_work( const Side side,
             const std::ptrdiff_t m, const std::ptrdiff_t n ) {
-        if ( side == 'L' )
-            return std::max< std::ptrdiff_t >( 1, n );
-        else
-            return std::max< std::ptrdiff_t >( 1, m );
+        return std::max< std::ptrdiff_t >( 1, bindings::detail::if_left( side,
+                n, m ) );
     }
 };
 
@@ -203,11 +207,11 @@
 // * MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-ormql( const char side, const fortran_int_t k, const MatrixA& a,
+ormql( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, MatrixC& c, Workspace work ) {
     return ormql_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c, work );
@@ -218,10 +222,11 @@
 // * MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-ormql( const char side, const fortran_int_t k, const MatrixA& a,
+ormql( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, MatrixC& c ) {
     return ormql_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c,
@@ -233,11 +238,11 @@
 // * const MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-ormql( const char side, const fortran_int_t k, const MatrixA& a,
+ormql( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, const MatrixC& c, Workspace work ) {
     return ormql_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c, work );
@@ -248,10 +253,11 @@
 // * const MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-ormql( const char side, const fortran_int_t k, const MatrixA& a,
+ormql( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, const MatrixC& c ) {
     return ormql_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormqr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormqr.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormqr.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -17,6 +17,7 @@
 #include <boost/assert.hpp>
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/detail/array.hpp>
+#include <boost/numeric/bindings/detail/if_left.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/lapack/workspace.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
@@ -51,14 +52,15 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * float value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t ormqr( const char side, Trans, const fortran_int_t m,
-        const fortran_int_t n, const fortran_int_t k, const float* a,
-        const fortran_int_t lda, const float* tau, float* c,
+template< typename Side, typename Trans >
+inline std::ptrdiff_t ormqr( const Side side, const Trans trans,
+        const fortran_int_t m, const fortran_int_t n, const fortran_int_t k,
+        const float* a, const fortran_int_t lda, const float* tau, float* c,
         const fortran_int_t ldc, float* work, const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_SORMQR( &side, &lapack_option< Trans >::value, &m, &n, &k, a, &lda,
-            tau, c, &ldc, work, &lwork, &info );
+    LAPACK_SORMQR( &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork,
+            &info );
     return info;
 }
 
@@ -67,14 +69,16 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * double value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t ormqr( const char side, Trans, const fortran_int_t m,
-        const fortran_int_t n, const fortran_int_t k, const double* a,
-        const fortran_int_t lda, const double* tau, double* c,
-        const fortran_int_t ldc, double* work, const fortran_int_t lwork ) {
+template< typename Side, typename Trans >
+inline std::ptrdiff_t ormqr( const Side side, const Trans trans,
+        const fortran_int_t m, const fortran_int_t n, const fortran_int_t k,
+        const double* a, const fortran_int_t lda, const double* tau,
+        double* c, const fortran_int_t ldc, double* work,
+        const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_DORMQR( &side, &lapack_option< Trans >::value, &m, &n, &k, a, &lda,
-            tau, c, &ldc, work, &lwork, &info );
+    LAPACK_DORMQR( &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork,
+            &info );
     return info;
 }
 
@@ -96,9 +100,9 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC,
-            typename WORK >
-    static std::ptrdiff_t invoke( const char side, const MatrixA& a,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC, typename WORK >
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
             const VectorTAU& tau, MatrixC& c, detail::workspace1<
             WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -124,7 +128,6 @@
         BOOST_ASSERT( bindings::size_row(c) >= 0 );
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         return detail::ormqr( side, trans(), bindings::size_row(c),
                 bindings::size_column(c), bindings::size(tau),
                 bindings::begin_value(a), bindings::stride_major(a),
@@ -141,8 +144,9 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const MatrixA& a,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
             const VectorTAU& tau, MatrixC& c, minimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
@@ -158,8 +162,9 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const MatrixA& a,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
             const VectorTAU& tau, MatrixC& c, optimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
@@ -178,12 +183,11 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
-    static std::ptrdiff_t min_size_work( const char side,
+    template< typename Side >
+    static std::ptrdiff_t min_size_work( const Side side,
             const std::ptrdiff_t m, const std::ptrdiff_t n ) {
-        if ( side == 'L' )
-            return std::max< std::ptrdiff_t >( 1, n );
-        else
-            return std::max< std::ptrdiff_t >( 1, m );
+        return std::max< std::ptrdiff_t >( 1, bindings::detail::if_left( side,
+                n, m ) );
     }
 };
 
@@ -202,11 +206,11 @@
 // * MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-ormqr( const char side, const MatrixA& a, const VectorTAU& tau,
+ormqr( const Side side, const MatrixA& a, const VectorTAU& tau,
         MatrixC& c, Workspace work ) {
     return ormqr_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, a, tau, c, work );
@@ -217,10 +221,11 @@
 // * MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-ormqr( const char side, const MatrixA& a, const VectorTAU& tau,
+ormqr( const Side side, const MatrixA& a, const VectorTAU& tau,
         MatrixC& c ) {
     return ormqr_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, a, tau, c, optimal_workspace() );
@@ -231,11 +236,11 @@
 // * const MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-ormqr( const char side, const MatrixA& a, const VectorTAU& tau,
+ormqr( const Side side, const MatrixA& a, const VectorTAU& tau,
         const MatrixC& c, Workspace work ) {
     return ormqr_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, a, tau, c, work );
@@ -246,10 +251,11 @@
 // * const MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-ormqr( const char side, const MatrixA& a, const VectorTAU& tau,
+ormqr( const Side side, const MatrixA& a, const VectorTAU& tau,
         const MatrixC& c ) {
     return ormqr_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, a, tau, c, optimal_workspace() );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormrq.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormrq.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormrq.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -17,6 +17,7 @@
 #include <boost/assert.hpp>
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/detail/array.hpp>
+#include <boost/numeric/bindings/detail/if_left.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/lapack/workspace.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
@@ -51,14 +52,15 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * float value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t ormrq( const char side, Trans, const fortran_int_t m,
-        const fortran_int_t n, const fortran_int_t k, const float* a,
-        const fortran_int_t lda, const float* tau, float* c,
+template< typename Side, typename Trans >
+inline std::ptrdiff_t ormrq( const Side side, const Trans trans,
+        const fortran_int_t m, const fortran_int_t n, const fortran_int_t k,
+        const float* a, const fortran_int_t lda, const float* tau, float* c,
         const fortran_int_t ldc, float* work, const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_SORMRQ( &side, &lapack_option< Trans >::value, &m, &n, &k, a, &lda,
-            tau, c, &ldc, work, &lwork, &info );
+    LAPACK_SORMRQ( &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork,
+            &info );
     return info;
 }
 
@@ -67,14 +69,16 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * double value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t ormrq( const char side, Trans, const fortran_int_t m,
-        const fortran_int_t n, const fortran_int_t k, const double* a,
-        const fortran_int_t lda, const double* tau, double* c,
-        const fortran_int_t ldc, double* work, const fortran_int_t lwork ) {
+template< typename Side, typename Trans >
+inline std::ptrdiff_t ormrq( const Side side, const Trans trans,
+        const fortran_int_t m, const fortran_int_t n, const fortran_int_t k,
+        const double* a, const fortran_int_t lda, const double* tau,
+        double* c, const fortran_int_t ldc, double* work,
+        const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_DORMRQ( &side, &lapack_option< Trans >::value, &m, &n, &k, a, &lda,
-            tau, c, &ldc, work, &lwork, &info );
+    LAPACK_DORMRQ( &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork,
+            &info );
     return info;
 }
 
@@ -96,9 +100,9 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC,
-            typename WORK >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t k,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC, typename WORK >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
             const MatrixA& a, const VectorTAU& tau, MatrixC& c,
             detail::workspace1< WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -126,7 +130,6 @@
                 k) );
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         return detail::ormrq( side, trans(), bindings::size_row(c),
                 bindings::size_column(c), k, bindings::begin_value(a),
                 bindings::stride_major(a), bindings::begin_value(tau),
@@ -142,8 +145,9 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t k,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
             const MatrixA& a, const VectorTAU& tau, MatrixC& c,
             minimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -160,8 +164,9 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t k,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
             const MatrixA& a, const VectorTAU& tau, MatrixC& c,
             optimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -181,12 +186,11 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
-    static std::ptrdiff_t min_size_work( const char side,
+    template< typename Side >
+    static std::ptrdiff_t min_size_work( const Side side,
             const std::ptrdiff_t m, const std::ptrdiff_t n ) {
-        if ( side == 'L' )
-            return std::max< std::ptrdiff_t >( 1, n );
-        else
-            return std::max< std::ptrdiff_t >( 1, m );
+        return std::max< std::ptrdiff_t >( 1, bindings::detail::if_left( side,
+                n, m ) );
     }
 };
 
@@ -205,11 +209,11 @@
 // * MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-ormrq( const char side, const fortran_int_t k, const MatrixA& a,
+ormrq( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, MatrixC& c, Workspace work ) {
     return ormrq_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c, work );
@@ -220,10 +224,11 @@
 // * MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-ormrq( const char side, const fortran_int_t k, const MatrixA& a,
+ormrq( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, MatrixC& c ) {
     return ormrq_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c,
@@ -235,11 +240,11 @@
 // * const MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-ormrq( const char side, const fortran_int_t k, const MatrixA& a,
+ormrq( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, const MatrixC& c, Workspace work ) {
     return ormrq_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c, work );
@@ -250,10 +255,11 @@
 // * const MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-ormrq( const char side, const fortran_int_t k, const MatrixA& a,
+ormrq( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, const MatrixC& c ) {
     return ormrq_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormrz.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormrz.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormrz.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -51,14 +51,16 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * float value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t ormrz( const char side, Trans, const fortran_int_t m,
-        const fortran_int_t n, const fortran_int_t k, const fortran_int_t l,
-        const float* a, const fortran_int_t lda, const float* tau, float* c,
-        const fortran_int_t ldc, float* work, const fortran_int_t lwork ) {
+template< typename Side, typename Trans >
+inline std::ptrdiff_t ormrz( const Side side, const Trans trans,
+        const fortran_int_t m, const fortran_int_t n, const fortran_int_t k,
+        const fortran_int_t l, const float* a, const fortran_int_t lda,
+        const float* tau, float* c, const fortran_int_t ldc, float* work,
+        const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_SORMRZ( &side, &lapack_option< Trans >::value, &m, &n, &k, &l, a,
-            &lda, tau, c, &ldc, work, &lwork, &info );
+    LAPACK_SORMRZ( &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &m, &n, &k, &l, a, &lda, tau, c, &ldc, work,
+            &lwork, &info );
     return info;
 }
 
@@ -67,15 +69,16 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * double value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t ormrz( const char side, Trans, const fortran_int_t m,
-        const fortran_int_t n, const fortran_int_t k, const fortran_int_t l,
-        const double* a, const fortran_int_t lda, const double* tau,
-        double* c, const fortran_int_t ldc, double* work,
+template< typename Side, typename Trans >
+inline std::ptrdiff_t ormrz( const Side side, const Trans trans,
+        const fortran_int_t m, const fortran_int_t n, const fortran_int_t k,
+        const fortran_int_t l, const double* a, const fortran_int_t lda,
+        const double* tau, double* c, const fortran_int_t ldc, double* work,
         const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_DORMRZ( &side, &lapack_option< Trans >::value, &m, &n, &k, &l, a,
-            &lda, tau, c, &ldc, work, &lwork, &info );
+    LAPACK_DORMRZ( &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &m, &n, &k, &l, a, &lda, tau, c, &ldc, work,
+            &lwork, &info );
     return info;
 }
 
@@ -97,9 +100,9 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC,
-            typename WORK >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t k,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC, typename WORK >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
             const MatrixA& a, const VectorTAU& tau, MatrixC& c,
             detail::workspace1< WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -126,7 +129,6 @@
                 k) );
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         return detail::ormrz( side, trans(), bindings::size_row(c),
                 bindings::size_column(c), k, bindings::size_column_op(a,
                 trans()), bindings::begin_value(a), bindings::stride_major(a),
@@ -143,8 +145,9 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t k,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
             const MatrixA& a, const VectorTAU& tau, MatrixC& c,
             minimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -161,8 +164,9 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t k,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
             const MatrixA& a, const VectorTAU& tau, MatrixC& c,
             optimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -182,8 +186,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
@@ -202,11 +207,11 @@
 // * MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-ormrz( const char side, const fortran_int_t k, const MatrixA& a,
+ormrz( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, MatrixC& c, Workspace work ) {
     return ormrz_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c, work );
@@ -217,10 +222,11 @@
 // * MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-ormrz( const char side, const fortran_int_t k, const MatrixA& a,
+ormrz( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, MatrixC& c ) {
     return ormrz_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c,
@@ -232,11 +238,11 @@
 // * const MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-ormrz( const char side, const fortran_int_t k, const MatrixA& a,
+ormrz( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, const MatrixC& c, Workspace work ) {
     return ormrz_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c, work );
@@ -247,10 +253,11 @@
 // * const MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-ormrz( const char side, const fortran_int_t k, const MatrixA& a,
+ormrz( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, const MatrixC& c ) {
     return ormrz_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormtr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormtr.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ormtr.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -17,6 +17,7 @@
 #include <boost/assert.hpp>
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/detail/array.hpp>
+#include <boost/numeric/bindings/detail/if_left.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/lapack/workspace.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
@@ -52,15 +53,15 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * float value-type.
 //
-template< typename UpLo, typename Trans >
-inline std::ptrdiff_t ormtr( const char side, UpLo, Trans,
-        const fortran_int_t m, const fortran_int_t n, const float* a,
-        const fortran_int_t lda, const float* tau, float* c,
+template< typename Side, typename UpLo, typename Trans >
+inline std::ptrdiff_t ormtr( const Side side, const UpLo uplo,
+        const Trans trans, const fortran_int_t m, const fortran_int_t n,
+        const float* a, const fortran_int_t lda, const float* tau, float* c,
         const fortran_int_t ldc, float* work, const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_SORMTR( &side, &lapack_option< UpLo >::value, &lapack_option<
-            Trans >::value, &m, &n, a, &lda, tau, c, &ldc, work, &lwork,
-            &info );
+    LAPACK_SORMTR( &lapack_option< Side >::value, &lapack_option<
+            UpLo >::value, &lapack_option< Trans >::value, &m, &n, a, &lda,
+            tau, c, &ldc, work, &lwork, &info );
     return info;
 }
 
@@ -69,15 +70,16 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * double value-type.
 //
-template< typename UpLo, typename Trans >
-inline std::ptrdiff_t ormtr( const char side, UpLo, Trans,
-        const fortran_int_t m, const fortran_int_t n, const double* a,
-        const fortran_int_t lda, const double* tau, double* c,
-        const fortran_int_t ldc, double* work, const fortran_int_t lwork ) {
+template< typename Side, typename UpLo, typename Trans >
+inline std::ptrdiff_t ormtr( const Side side, const UpLo uplo,
+        const Trans trans, const fortran_int_t m, const fortran_int_t n,
+        const double* a, const fortran_int_t lda, const double* tau,
+        double* c, const fortran_int_t ldc, double* work,
+        const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_DORMTR( &side, &lapack_option< UpLo >::value, &lapack_option<
-            Trans >::value, &m, &n, a, &lda, tau, c, &ldc, work, &lwork,
-            &info );
+    LAPACK_DORMTR( &lapack_option< Side >::value, &lapack_option<
+            UpLo >::value, &lapack_option< Trans >::value, &m, &n, a, &lda,
+            tau, c, &ldc, work, &lwork, &info );
     return info;
 }
 
@@ -99,9 +101,9 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC,
-            typename WORK >
-    static std::ptrdiff_t invoke( const char side, const MatrixA& a,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC, typename WORK >
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
             const VectorTAU& tau, MatrixC& c, detail::workspace1<
             WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -127,7 +129,6 @@
         BOOST_ASSERT( bindings::size_row(c) >= 0 );
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         return detail::ormtr( side, uplo(), trans(), bindings::size_row(c),
                 bindings::size_column(c), bindings::begin_value(a),
                 bindings::stride_major(a), bindings::begin_value(tau),
@@ -143,8 +144,9 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const MatrixA& a,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
             const VectorTAU& tau, MatrixC& c, minimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
@@ -161,8 +163,9 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const MatrixA& a,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
             const VectorTAU& tau, MatrixC& c, optimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
@@ -182,12 +185,11 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
-    static std::ptrdiff_t min_size_work( const char side,
+    template< typename Side >
+    static std::ptrdiff_t min_size_work( const Side side,
             const std::ptrdiff_t m, const std::ptrdiff_t n ) {
-        if ( side == 'L' )
-            return std::max< std::ptrdiff_t >( 1, n );
-        else
-            return std::max< std::ptrdiff_t >( 1, m );
+        return std::max< std::ptrdiff_t >( 1, bindings::detail::if_left( side,
+                n, m ) );
     }
 };
 
@@ -206,11 +208,11 @@
 // * MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-ormtr( const char side, const MatrixA& a, const VectorTAU& tau,
+ormtr( const Side side, const MatrixA& a, const VectorTAU& tau,
         MatrixC& c, Workspace work ) {
     return ormtr_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, a, tau, c, work );
@@ -221,10 +223,11 @@
 // * MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-ormtr( const char side, const MatrixA& a, const VectorTAU& tau,
+ormtr( const Side side, const MatrixA& a, const VectorTAU& tau,
         MatrixC& c ) {
     return ormtr_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, a, tau, c, optimal_workspace() );
@@ -235,11 +238,11 @@
 // * const MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-ormtr( const char side, const MatrixA& a, const VectorTAU& tau,
+ormtr( const Side side, const MatrixA& a, const VectorTAU& tau,
         const MatrixC& c, Workspace work ) {
     return ormtr_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, a, tau, c, work );
@@ -250,10 +253,11 @@
 // * const MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-ormtr( const char side, const MatrixA& a, const VectorTAU& tau,
+ormtr( const Side side, const MatrixA& a, const VectorTAU& tau,
         const MatrixC& c ) {
     return ormtr_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, a, tau, c, optimal_workspace() );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbequ.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbequ.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbequ.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -53,7 +53,7 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pbequ( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pbequ( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t kd, const float* ab, const fortran_int_t ldab,
         float* s, float& scond, float& amax ) {
     fortran_int_t info(0);
@@ -68,7 +68,7 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pbequ( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pbequ( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t kd, const double* ab, const fortran_int_t ldab,
         double* s, double& scond, double& amax ) {
     fortran_int_t info(0);
@@ -83,7 +83,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pbequ( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pbequ( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t kd, const std::complex<float>* ab,
         const fortran_int_t ldab, float* s, float& scond, float& amax ) {
     fortran_int_t info(0);
@@ -98,7 +98,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pbequ( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pbequ( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t kd, const std::complex<double>* ab,
         const fortran_int_t ldab, double* s, double& scond, double& amax ) {
     fortran_int_t info(0);
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbrfs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbrfs.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbrfs.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -55,7 +55,7 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pbrfs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pbrfs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t kd, const fortran_int_t nrhs, const float* ab,
         const fortran_int_t ldab, const float* afb, const fortran_int_t ldafb,
         const float* b, const fortran_int_t ldb, float* x,
@@ -73,7 +73,7 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pbrfs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pbrfs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t kd, const fortran_int_t nrhs, const double* ab,
         const fortran_int_t ldab, const double* afb,
         const fortran_int_t ldafb, const double* b, const fortran_int_t ldb,
@@ -91,7 +91,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pbrfs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pbrfs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t kd, const fortran_int_t nrhs,
         const std::complex<float>* ab, const fortran_int_t ldab,
         const std::complex<float>* afb, const fortran_int_t ldafb,
@@ -110,7 +110,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pbrfs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pbrfs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t kd, const fortran_int_t nrhs,
         const std::complex<double>* ab, const fortran_int_t ldab,
         const std::complex<double>* afb, const fortran_int_t ldafb,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbstf.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbstf.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbstf.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -50,7 +50,7 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pbstf( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pbstf( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t kd, float* ab, const fortran_int_t ldab ) {
     fortran_int_t info(0);
     LAPACK_SPBSTF( &lapack_option< UpLo >::value, &n, &kd, ab, &ldab, &info );
@@ -63,7 +63,7 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pbstf( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pbstf( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t kd, double* ab, const fortran_int_t ldab ) {
     fortran_int_t info(0);
     LAPACK_DPBSTF( &lapack_option< UpLo >::value, &n, &kd, ab, &ldab, &info );
@@ -76,7 +76,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pbstf( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pbstf( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t kd, std::complex<float>* ab,
         const fortran_int_t ldab ) {
     fortran_int_t info(0);
@@ -90,7 +90,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pbstf( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pbstf( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t kd, std::complex<double>* ab,
         const fortran_int_t ldab ) {
     fortran_int_t info(0);
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbtrf.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbtrf.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pbtrf.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -50,7 +50,7 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pbtrf( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pbtrf( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t kd, float* ab, const fortran_int_t ldab ) {
     fortran_int_t info(0);
     LAPACK_SPBTRF( &lapack_option< UpLo >::value, &n, &kd, ab, &ldab, &info );
@@ -63,7 +63,7 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pbtrf( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pbtrf( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t kd, double* ab, const fortran_int_t ldab ) {
     fortran_int_t info(0);
     LAPACK_DPBTRF( &lapack_option< UpLo >::value, &n, &kd, ab, &ldab, &info );
@@ -76,7 +76,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pbtrf( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pbtrf( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t kd, std::complex<float>* ab,
         const fortran_int_t ldab ) {
     fortran_int_t info(0);
@@ -90,7 +90,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pbtrf( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pbtrf( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t kd, std::complex<double>* ab,
         const fortran_int_t ldab ) {
     fortran_int_t info(0);
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pftrs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pftrs.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pftrs.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -49,9 +49,9 @@
 // * float value-type.
 //
 template< typename TransR >
-inline std::ptrdiff_t pftrs( TransR, const char uplo, const fortran_int_t n,
-        const fortran_int_t nrhs, const float* a, float* b,
-        const fortran_int_t ldb ) {
+inline std::ptrdiff_t pftrs( const TransR transr, const char uplo,
+        const fortran_int_t n, const fortran_int_t nrhs, const float* a,
+        float* b, const fortran_int_t ldb ) {
     fortran_int_t info(0);
     LAPACK_SPFTRS( &lapack_option< TransR >::value, &uplo, &n, &nrhs, a, b,
             &ldb, &info );
@@ -64,9 +64,9 @@
 // * double value-type.
 //
 template< typename TransR >
-inline std::ptrdiff_t pftrs( TransR, const char uplo, const fortran_int_t n,
-        const fortran_int_t nrhs, const double* a, double* b,
-        const fortran_int_t ldb ) {
+inline std::ptrdiff_t pftrs( const TransR transr, const char uplo,
+        const fortran_int_t n, const fortran_int_t nrhs, const double* a,
+        double* b, const fortran_int_t ldb ) {
     fortran_int_t info(0);
     LAPACK_DPFTRS( &lapack_option< TransR >::value, &uplo, &n, &nrhs, a, b,
             &ldb, &info );
@@ -79,9 +79,10 @@
 // * complex<float> value-type.
 //
 template< typename TransR >
-inline std::ptrdiff_t pftrs( TransR, const char uplo, const fortran_int_t n,
-        const fortran_int_t nrhs, const std::complex<float>* a,
-        std::complex<float>* b, const fortran_int_t ldb ) {
+inline std::ptrdiff_t pftrs( const TransR transr, const char uplo,
+        const fortran_int_t n, const fortran_int_t nrhs,
+        const std::complex<float>* a, std::complex<float>* b,
+        const fortran_int_t ldb ) {
     fortran_int_t info(0);
     LAPACK_CPFTRS( &lapack_option< TransR >::value, &uplo, &n, &nrhs, a, b,
             &ldb, &info );
@@ -94,9 +95,10 @@
 // * complex<double> value-type.
 //
 template< typename TransR >
-inline std::ptrdiff_t pftrs( TransR, const char uplo, const fortran_int_t n,
-        const fortran_int_t nrhs, const std::complex<double>* a,
-        std::complex<double>* b, const fortran_int_t ldb ) {
+inline std::ptrdiff_t pftrs( const TransR transr, const char uplo,
+        const fortran_int_t n, const fortran_int_t nrhs,
+        const std::complex<double>* a, std::complex<double>* b,
+        const fortran_int_t ldb ) {
     fortran_int_t info(0);
     LAPACK_ZPFTRS( &lapack_option< TransR >::value, &uplo, &n, &nrhs, a, b,
             &ldb, &info );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pocon.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pocon.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pocon.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -54,9 +54,9 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pocon( UpLo, const fortran_int_t n, const float* a,
-        const fortran_int_t lda, const float anorm, float& rcond, float* work,
-        fortran_int_t* iwork ) {
+inline std::ptrdiff_t pocon( const UpLo uplo, const fortran_int_t n,
+        const float* a, const fortran_int_t lda, const float anorm,
+        float& rcond, float* work, fortran_int_t* iwork ) {
     fortran_int_t info(0);
     LAPACK_SPOCON( &lapack_option< UpLo >::value, &n, a, &lda, &anorm, &rcond,
             work, iwork, &info );
@@ -69,9 +69,9 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pocon( UpLo, const fortran_int_t n, const double* a,
-        const fortran_int_t lda, const double anorm, double& rcond,
-        double* work, fortran_int_t* iwork ) {
+inline std::ptrdiff_t pocon( const UpLo uplo, const fortran_int_t n,
+        const double* a, const fortran_int_t lda, const double anorm,
+        double& rcond, double* work, fortran_int_t* iwork ) {
     fortran_int_t info(0);
     LAPACK_DPOCON( &lapack_option< UpLo >::value, &n, a, &lda, &anorm, &rcond,
             work, iwork, &info );
@@ -84,7 +84,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pocon( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pocon( const UpLo uplo, const fortran_int_t n,
         const std::complex<float>* a, const fortran_int_t lda,
         const float anorm, float& rcond, std::complex<float>* work,
         float* rwork ) {
@@ -100,7 +100,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pocon( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pocon( const UpLo uplo, const fortran_int_t n,
         const std::complex<double>* a, const fortran_int_t lda,
         const double anorm, double& rcond, std::complex<double>* work,
         double* rwork ) {
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/porfs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/porfs.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/porfs.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -54,7 +54,7 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t porfs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t porfs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const float* a, const fortran_int_t lda,
         const float* af, const fortran_int_t ldaf, const float* b,
         const fortran_int_t ldb, float* x, const fortran_int_t ldx,
@@ -71,7 +71,7 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t porfs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t porfs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const double* a, const fortran_int_t lda,
         const double* af, const fortran_int_t ldaf, const double* b,
         const fortran_int_t ldb, double* x, const fortran_int_t ldx,
@@ -88,7 +88,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t porfs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t porfs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<float>* a,
         const fortran_int_t lda, const std::complex<float>* af,
         const fortran_int_t ldaf, const std::complex<float>* b,
@@ -107,7 +107,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t porfs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t porfs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<double>* a,
         const fortran_int_t lda, const std::complex<double>* af,
         const fortran_int_t ldaf, const std::complex<double>* b,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/potrf.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/potrf.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/potrf.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -58,7 +58,7 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t potrf( Order, UpLo, const int n, float* a,
+inline std::ptrdiff_t potrf( Order, const UpLo uplo, const int n, float* a,
         const int lda ) {
     return clapack_spotrf( clapack_option< Order >::value, clapack_option<
             UpLo >::value, n, a, lda );
@@ -70,7 +70,7 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t potrf( Order, UpLo, const int n, double* a,
+inline std::ptrdiff_t potrf( Order, const UpLo uplo, const int n, double* a,
         const int lda ) {
     return clapack_dpotrf( clapack_option< Order >::value, clapack_option<
             UpLo >::value, n, a, lda );
@@ -82,8 +82,8 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t potrf( Order, UpLo, const int n, std::complex<float>* a,
-        const int lda ) {
+inline std::ptrdiff_t potrf( Order, const UpLo uplo, const int n,
+        std::complex<float>* a, const int lda ) {
     return clapack_cpotrf( clapack_option< Order >::value, clapack_option<
             UpLo >::value, n, a, lda );
 }
@@ -94,8 +94,8 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t potrf( Order, UpLo, const int n, std::complex<double>* a,
-        const int lda ) {
+inline std::ptrdiff_t potrf( Order, const UpLo uplo, const int n,
+        std::complex<double>* a, const int lda ) {
     return clapack_zpotrf( clapack_option< Order >::value, clapack_option<
             UpLo >::value, n, a, lda );
 }
@@ -107,8 +107,8 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t potrf( Order, UpLo, const fortran_int_t n, float* a,
-        const fortran_int_t lda ) {
+inline std::ptrdiff_t potrf( Order, const UpLo uplo, const fortran_int_t n,
+        float* a, const fortran_int_t lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     fortran_int_t info(0);
     LAPACK_SPOTRF( &lapack_option< UpLo >::value, &n, a, &lda, &info );
@@ -121,8 +121,8 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t potrf( Order, UpLo, const fortran_int_t n, double* a,
-        const fortran_int_t lda ) {
+inline std::ptrdiff_t potrf( Order, const UpLo uplo, const fortran_int_t n,
+        double* a, const fortran_int_t lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     fortran_int_t info(0);
     LAPACK_DPOTRF( &lapack_option< UpLo >::value, &n, a, &lda, &info );
@@ -135,7 +135,7 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t potrf( Order, UpLo, const fortran_int_t n,
+inline std::ptrdiff_t potrf( Order, const UpLo uplo, const fortran_int_t n,
         std::complex<float>* a, const fortran_int_t lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     fortran_int_t info(0);
@@ -149,7 +149,7 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t potrf( Order, UpLo, const fortran_int_t n,
+inline std::ptrdiff_t potrf( Order, const UpLo uplo, const fortran_int_t n,
         std::complex<double>* a, const fortran_int_t lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     fortran_int_t info(0);
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/potri.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/potri.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/potri.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -58,7 +58,7 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t potri( Order, UpLo, const int n, float* a,
+inline std::ptrdiff_t potri( Order, const UpLo uplo, const int n, float* a,
         const int lda ) {
     return clapack_spotri( clapack_option< Order >::value, clapack_option<
             UpLo >::value, n, a, lda );
@@ -70,7 +70,7 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t potri( Order, UpLo, const int n, double* a,
+inline std::ptrdiff_t potri( Order, const UpLo uplo, const int n, double* a,
         const int lda ) {
     return clapack_dpotri( clapack_option< Order >::value, clapack_option<
             UpLo >::value, n, a, lda );
@@ -82,8 +82,8 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t potri( Order, UpLo, const int n, std::complex<float>* a,
-        const int lda ) {
+inline std::ptrdiff_t potri( Order, const UpLo uplo, const int n,
+        std::complex<float>* a, const int lda ) {
     return clapack_cpotri( clapack_option< Order >::value, clapack_option<
             UpLo >::value, n, a, lda );
 }
@@ -94,8 +94,8 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t potri( Order, UpLo, const int n, std::complex<double>* a,
-        const int lda ) {
+inline std::ptrdiff_t potri( Order, const UpLo uplo, const int n,
+        std::complex<double>* a, const int lda ) {
     return clapack_zpotri( clapack_option< Order >::value, clapack_option<
             UpLo >::value, n, a, lda );
 }
@@ -107,8 +107,8 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t potri( Order, UpLo, const fortran_int_t n, float* a,
-        const fortran_int_t lda ) {
+inline std::ptrdiff_t potri( Order, const UpLo uplo, const fortran_int_t n,
+        float* a, const fortran_int_t lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     fortran_int_t info(0);
     LAPACK_SPOTRI( &lapack_option< UpLo >::value, &n, a, &lda, &info );
@@ -121,8 +121,8 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t potri( Order, UpLo, const fortran_int_t n, double* a,
-        const fortran_int_t lda ) {
+inline std::ptrdiff_t potri( Order, const UpLo uplo, const fortran_int_t n,
+        double* a, const fortran_int_t lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     fortran_int_t info(0);
     LAPACK_DPOTRI( &lapack_option< UpLo >::value, &n, a, &lda, &info );
@@ -135,7 +135,7 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t potri( Order, UpLo, const fortran_int_t n,
+inline std::ptrdiff_t potri( Order, const UpLo uplo, const fortran_int_t n,
         std::complex<float>* a, const fortran_int_t lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     fortran_int_t info(0);
@@ -149,7 +149,7 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t potri( Order, UpLo, const fortran_int_t n,
+inline std::ptrdiff_t potri( Order, const UpLo uplo, const fortran_int_t n,
         std::complex<double>* a, const fortran_int_t lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     fortran_int_t info(0);
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/potrs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/potrs.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/potrs.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -58,8 +58,9 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t potrs( Order, UpLo, const int n, const int nrhs,
-        const float* a, const int lda, float* b, const int ldb ) {
+inline std::ptrdiff_t potrs( Order, const UpLo uplo, const int n,
+        const int nrhs, const float* a, const int lda, float* b,
+        const int ldb ) {
     return clapack_spotrs( clapack_option< Order >::value, clapack_option<
             UpLo >::value, n, nrhs, a, lda, b, ldb );
 }
@@ -70,8 +71,9 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t potrs( Order, UpLo, const int n, const int nrhs,
-        const double* a, const int lda, double* b, const int ldb ) {
+inline std::ptrdiff_t potrs( Order, const UpLo uplo, const int n,
+        const int nrhs, const double* a, const int lda, double* b,
+        const int ldb ) {
     return clapack_dpotrs( clapack_option< Order >::value, clapack_option<
             UpLo >::value, n, nrhs, a, lda, b, ldb );
 }
@@ -82,9 +84,9 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t potrs( Order, UpLo, const int n, const int nrhs,
-        const std::complex<float>* a, const int lda, std::complex<float>* b,
-        const int ldb ) {
+inline std::ptrdiff_t potrs( Order, const UpLo uplo, const int n,
+        const int nrhs, const std::complex<float>* a, const int lda,
+        std::complex<float>* b, const int ldb ) {
     return clapack_cpotrs( clapack_option< Order >::value, clapack_option<
             UpLo >::value, n, nrhs, a, lda, b, ldb );
 }
@@ -95,9 +97,9 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t potrs( Order, UpLo, const int n, const int nrhs,
-        const std::complex<double>* a, const int lda, std::complex<double>* b,
-        const int ldb ) {
+inline std::ptrdiff_t potrs( Order, const UpLo uplo, const int n,
+        const int nrhs, const std::complex<double>* a, const int lda,
+        std::complex<double>* b, const int ldb ) {
     return clapack_zpotrs( clapack_option< Order >::value, clapack_option<
             UpLo >::value, n, nrhs, a, lda, b, ldb );
 }
@@ -109,7 +111,7 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t potrs( Order, UpLo, const fortran_int_t n,
+inline std::ptrdiff_t potrs( Order, const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const float* a, const fortran_int_t lda,
         float* b, const fortran_int_t ldb ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
@@ -125,7 +127,7 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t potrs( Order, UpLo, const fortran_int_t n,
+inline std::ptrdiff_t potrs( Order, const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const double* a, const fortran_int_t lda,
         double* b, const fortran_int_t ldb ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
@@ -141,7 +143,7 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t potrs( Order, UpLo, const fortran_int_t n,
+inline std::ptrdiff_t potrs( Order, const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<float>* a,
         const fortran_int_t lda, std::complex<float>* b,
         const fortran_int_t ldb ) {
@@ -158,7 +160,7 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t potrs( Order, UpLo, const fortran_int_t n,
+inline std::ptrdiff_t potrs( Order, const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<double>* a,
         const fortran_int_t lda, std::complex<double>* b,
         const fortran_int_t ldb ) {
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ppcon.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ppcon.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ppcon.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -54,8 +54,9 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t ppcon( UpLo, const fortran_int_t n, const float* ap,
-        const float anorm, float& rcond, float* work, fortran_int_t* iwork ) {
+inline std::ptrdiff_t ppcon( const UpLo uplo, const fortran_int_t n,
+        const float* ap, const float anorm, float& rcond, float* work,
+        fortran_int_t* iwork ) {
     fortran_int_t info(0);
     LAPACK_SPPCON( &lapack_option< UpLo >::value, &n, ap, &anorm, &rcond,
             work, iwork, &info );
@@ -68,8 +69,8 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t ppcon( UpLo, const fortran_int_t n, const double* ap,
-        const double anorm, double& rcond, double* work,
+inline std::ptrdiff_t ppcon( const UpLo uplo, const fortran_int_t n,
+        const double* ap, const double anorm, double& rcond, double* work,
         fortran_int_t* iwork ) {
     fortran_int_t info(0);
     LAPACK_DPPCON( &lapack_option< UpLo >::value, &n, ap, &anorm, &rcond,
@@ -83,7 +84,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t ppcon( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t ppcon( const UpLo uplo, const fortran_int_t n,
         const std::complex<float>* ap, const float anorm, float& rcond,
         std::complex<float>* work, float* rwork ) {
     fortran_int_t info(0);
@@ -98,7 +99,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t ppcon( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t ppcon( const UpLo uplo, const fortran_int_t n,
         const std::complex<double>* ap, const double anorm, double& rcond,
         std::complex<double>* work, double* rwork ) {
     fortran_int_t info(0);
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ppequ.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ppequ.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ppequ.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,8 +52,8 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t ppequ( UpLo, const fortran_int_t n, const float* ap,
-        float* s, float& scond, float& amax ) {
+inline std::ptrdiff_t ppequ( const UpLo uplo, const fortran_int_t n,
+        const float* ap, float* s, float& scond, float& amax ) {
     fortran_int_t info(0);
     LAPACK_SPPEQU( &lapack_option< UpLo >::value, &n, ap, s, &scond, &amax,
             &info );
@@ -66,8 +66,8 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t ppequ( UpLo, const fortran_int_t n, const double* ap,
-        double* s, double& scond, double& amax ) {
+inline std::ptrdiff_t ppequ( const UpLo uplo, const fortran_int_t n,
+        const double* ap, double* s, double& scond, double& amax ) {
     fortran_int_t info(0);
     LAPACK_DPPEQU( &lapack_option< UpLo >::value, &n, ap, s, &scond, &amax,
             &info );
@@ -80,7 +80,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t ppequ( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t ppequ( const UpLo uplo, const fortran_int_t n,
         const std::complex<float>* ap, float* s, float& scond, float& amax ) {
     fortran_int_t info(0);
     LAPACK_CPPEQU( &lapack_option< UpLo >::value, &n, ap, s, &scond, &amax,
@@ -94,7 +94,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t ppequ( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t ppequ( const UpLo uplo, const fortran_int_t n,
         const std::complex<double>* ap, double* s, double& scond,
         double& amax ) {
     fortran_int_t info(0);
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pprfs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pprfs.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pprfs.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -54,7 +54,7 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pprfs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pprfs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const float* ap, const float* afp,
         const float* b, const fortran_int_t ldb, float* x,
         const fortran_int_t ldx, float* ferr, float* berr, float* work,
@@ -71,7 +71,7 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pprfs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pprfs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const double* ap, const double* afp,
         const double* b, const fortran_int_t ldb, double* x,
         const fortran_int_t ldx, double* ferr, double* berr, double* work,
@@ -88,7 +88,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pprfs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pprfs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<float>* ap,
         const std::complex<float>* afp, const std::complex<float>* b,
         const fortran_int_t ldb, std::complex<float>* x,
@@ -106,7 +106,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pprfs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pprfs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<double>* ap,
         const std::complex<double>* afp, const std::complex<double>* b,
         const fortran_int_t ldb, std::complex<double>* x,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pptrf.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pptrf.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pptrf.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -49,7 +49,8 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pptrf( UpLo, const fortran_int_t n, float* ap ) {
+inline std::ptrdiff_t pptrf( const UpLo uplo, const fortran_int_t n,
+        float* ap ) {
     fortran_int_t info(0);
     LAPACK_SPPTRF( &lapack_option< UpLo >::value, &n, ap, &info );
     return info;
@@ -61,7 +62,8 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pptrf( UpLo, const fortran_int_t n, double* ap ) {
+inline std::ptrdiff_t pptrf( const UpLo uplo, const fortran_int_t n,
+        double* ap ) {
     fortran_int_t info(0);
     LAPACK_DPPTRF( &lapack_option< UpLo >::value, &n, ap, &info );
     return info;
@@ -73,7 +75,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pptrf( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pptrf( const UpLo uplo, const fortran_int_t n,
         std::complex<float>* ap ) {
     fortran_int_t info(0);
     LAPACK_CPPTRF( &lapack_option< UpLo >::value, &n, ap, &info );
@@ -86,7 +88,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pptrf( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pptrf( const UpLo uplo, const fortran_int_t n,
         std::complex<double>* ap ) {
     fortran_int_t info(0);
     LAPACK_ZPPTRF( &lapack_option< UpLo >::value, &n, ap, &info );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pptri.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pptri.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pptri.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -49,7 +49,8 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pptri( UpLo, const fortran_int_t n, float* ap ) {
+inline std::ptrdiff_t pptri( const UpLo uplo, const fortran_int_t n,
+        float* ap ) {
     fortran_int_t info(0);
     LAPACK_SPPTRI( &lapack_option< UpLo >::value, &n, ap, &info );
     return info;
@@ -61,7 +62,8 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pptri( UpLo, const fortran_int_t n, double* ap ) {
+inline std::ptrdiff_t pptri( const UpLo uplo, const fortran_int_t n,
+        double* ap ) {
     fortran_int_t info(0);
     LAPACK_DPPTRI( &lapack_option< UpLo >::value, &n, ap, &info );
     return info;
@@ -73,7 +75,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pptri( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pptri( const UpLo uplo, const fortran_int_t n,
         std::complex<float>* ap ) {
     fortran_int_t info(0);
     LAPACK_CPPTRI( &lapack_option< UpLo >::value, &n, ap, &info );
@@ -86,7 +88,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pptri( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pptri( const UpLo uplo, const fortran_int_t n,
         std::complex<double>* ap ) {
     fortran_int_t info(0);
     LAPACK_ZPPTRI( &lapack_option< UpLo >::value, &n, ap, &info );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pptrs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pptrs.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/pptrs.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -49,7 +49,7 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pptrs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pptrs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const float* ap, float* b,
         const fortran_int_t ldb ) {
     fortran_int_t info(0);
@@ -64,7 +64,7 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pptrs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pptrs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const double* ap, double* b,
         const fortran_int_t ldb ) {
     fortran_int_t info(0);
@@ -79,7 +79,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pptrs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pptrs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<float>* ap,
         std::complex<float>* b, const fortran_int_t ldb ) {
     fortran_int_t info(0);
@@ -94,7 +94,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pptrs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pptrs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<double>* ap,
         std::complex<double>* b, const fortran_int_t ldb ) {
     fortran_int_t info(0);
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sbgst.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sbgst.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sbgst.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,10 +52,11 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sbgst( const char vect, UpLo, const fortran_int_t n,
-        const fortran_int_t ka, const fortran_int_t kb, float* ab,
-        const fortran_int_t ldab, const float* bb, const fortran_int_t ldbb,
-        float* x, const fortran_int_t ldx, float* work ) {
+inline std::ptrdiff_t sbgst( const char vect, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t ka, const fortran_int_t kb,
+        float* ab, const fortran_int_t ldab, const float* bb,
+        const fortran_int_t ldbb, float* x, const fortran_int_t ldx,
+        float* work ) {
     fortran_int_t info(0);
     LAPACK_SSBGST( &vect, &lapack_option< UpLo >::value, &n, &ka, &kb, ab,
             &ldab, bb, &ldbb, x, &ldx, work, &info );
@@ -68,10 +69,11 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sbgst( const char vect, UpLo, const fortran_int_t n,
-        const fortran_int_t ka, const fortran_int_t kb, double* ab,
-        const fortran_int_t ldab, const double* bb, const fortran_int_t ldbb,
-        double* x, const fortran_int_t ldx, double* work ) {
+inline std::ptrdiff_t sbgst( const char vect, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t ka, const fortran_int_t kb,
+        double* ab, const fortran_int_t ldab, const double* bb,
+        const fortran_int_t ldbb, double* x, const fortran_int_t ldx,
+        double* work ) {
     fortran_int_t info(0);
     LAPACK_DSBGST( &vect, &lapack_option< UpLo >::value, &n, &ka, &kb, ab,
             &ldab, bb, &ldbb, x, &ldx, work, &info );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sbtrd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sbtrd.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sbtrd.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,9 +52,10 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sbtrd( const char vect, UpLo, const fortran_int_t n,
-        const fortran_int_t kd, float* ab, const fortran_int_t ldab, float* d,
-        float* e, float* q, const fortran_int_t ldq, float* work ) {
+inline std::ptrdiff_t sbtrd( const char vect, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t kd, float* ab,
+        const fortran_int_t ldab, float* d, float* e, float* q,
+        const fortran_int_t ldq, float* work ) {
     fortran_int_t info(0);
     LAPACK_SSBTRD( &vect, &lapack_option< UpLo >::value, &n, &kd, ab, &ldab,
             d, e, q, &ldq, work, &info );
@@ -67,10 +68,10 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sbtrd( const char vect, UpLo, const fortran_int_t n,
-        const fortran_int_t kd, double* ab, const fortran_int_t ldab,
-        double* d, double* e, double* q, const fortran_int_t ldq,
-        double* work ) {
+inline std::ptrdiff_t sbtrd( const char vect, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t kd, double* ab,
+        const fortran_int_t ldab, double* d, double* e, double* q,
+        const fortran_int_t ldq, double* work ) {
     fortran_int_t info(0);
     LAPACK_DSBTRD( &vect, &lapack_option< UpLo >::value, &n, &kd, ab, &ldab,
             d, e, q, &ldq, work, &info );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/spcon.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/spcon.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/spcon.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -54,9 +54,9 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t spcon( UpLo, const fortran_int_t n, const float* ap,
-        const fortran_int_t* ipiv, const float anorm, float& rcond,
-        float* work, fortran_int_t* iwork ) {
+inline std::ptrdiff_t spcon( const UpLo uplo, const fortran_int_t n,
+        const float* ap, const fortran_int_t* ipiv, const float anorm,
+        float& rcond, float* work, fortran_int_t* iwork ) {
     fortran_int_t info(0);
     LAPACK_SSPCON( &lapack_option< UpLo >::value, &n, ap, ipiv, &anorm,
             &rcond, work, iwork, &info );
@@ -69,9 +69,9 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t spcon( UpLo, const fortran_int_t n, const double* ap,
-        const fortran_int_t* ipiv, const double anorm, double& rcond,
-        double* work, fortran_int_t* iwork ) {
+inline std::ptrdiff_t spcon( const UpLo uplo, const fortran_int_t n,
+        const double* ap, const fortran_int_t* ipiv, const double anorm,
+        double& rcond, double* work, fortran_int_t* iwork ) {
     fortran_int_t info(0);
     LAPACK_DSPCON( &lapack_option< UpLo >::value, &n, ap, ipiv, &anorm,
             &rcond, work, iwork, &info );
@@ -84,7 +84,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t spcon( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t spcon( const UpLo uplo, const fortran_int_t n,
         const std::complex<float>* ap, const fortran_int_t* ipiv,
         const float anorm, float& rcond, std::complex<float>* work ) {
     fortran_int_t info(0);
@@ -99,7 +99,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t spcon( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t spcon( const UpLo uplo, const fortran_int_t n,
         const std::complex<double>* ap, const fortran_int_t* ipiv,
         const double anorm, double& rcond, std::complex<double>* work ) {
     fortran_int_t info(0);
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sprfs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sprfs.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sprfs.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -54,7 +54,7 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sprfs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t sprfs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const float* ap, const float* afp,
         const fortran_int_t* ipiv, const float* b, const fortran_int_t ldb,
         float* x, const fortran_int_t ldx, float* ferr, float* berr,
@@ -71,7 +71,7 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sprfs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t sprfs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const double* ap, const double* afp,
         const fortran_int_t* ipiv, const double* b, const fortran_int_t ldb,
         double* x, const fortran_int_t ldx, double* ferr, double* berr,
@@ -88,7 +88,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sprfs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t sprfs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<float>* ap,
         const std::complex<float>* afp, const fortran_int_t* ipiv,
         const std::complex<float>* b, const fortran_int_t ldb,
@@ -106,7 +106,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sprfs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t sprfs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<double>* ap,
         const std::complex<double>* afp, const fortran_int_t* ipiv,
         const std::complex<double>* b, const fortran_int_t ldb,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sptrd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sptrd.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sptrd.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -49,8 +49,8 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sptrd( UpLo, const fortran_int_t n, float* ap, float* d,
-        float* e, float* tau ) {
+inline std::ptrdiff_t sptrd( const UpLo uplo, const fortran_int_t n, float* ap,
+        float* d, float* e, float* tau ) {
     fortran_int_t info(0);
     LAPACK_SSPTRD( &lapack_option< UpLo >::value, &n, ap, d, e, tau, &info );
     return info;
@@ -62,8 +62,8 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sptrd( UpLo, const fortran_int_t n, double* ap,
-        double* d, double* e, double* tau ) {
+inline std::ptrdiff_t sptrd( const UpLo uplo, const fortran_int_t n,
+        double* ap, double* d, double* e, double* tau ) {
     fortran_int_t info(0);
     LAPACK_DSPTRD( &lapack_option< UpLo >::value, &n, ap, d, e, tau, &info );
     return info;
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sptrf.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sptrf.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sptrf.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -49,7 +49,7 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sptrf( UpLo, const fortran_int_t n, float* ap,
+inline std::ptrdiff_t sptrf( const UpLo uplo, const fortran_int_t n, float* ap,
         fortran_int_t* ipiv ) {
     fortran_int_t info(0);
     LAPACK_SSPTRF( &lapack_option< UpLo >::value, &n, ap, ipiv, &info );
@@ -62,8 +62,8 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sptrf( UpLo, const fortran_int_t n, double* ap,
-        fortran_int_t* ipiv ) {
+inline std::ptrdiff_t sptrf( const UpLo uplo, const fortran_int_t n,
+        double* ap, fortran_int_t* ipiv ) {
     fortran_int_t info(0);
     LAPACK_DSPTRF( &lapack_option< UpLo >::value, &n, ap, ipiv, &info );
     return info;
@@ -75,7 +75,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sptrf( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t sptrf( const UpLo uplo, const fortran_int_t n,
         std::complex<float>* ap, fortran_int_t* ipiv ) {
     fortran_int_t info(0);
     LAPACK_CSPTRF( &lapack_option< UpLo >::value, &n, ap, ipiv, &info );
@@ -88,7 +88,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sptrf( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t sptrf( const UpLo uplo, const fortran_int_t n,
         std::complex<double>* ap, fortran_int_t* ipiv ) {
     fortran_int_t info(0);
     LAPACK_ZSPTRF( &lapack_option< UpLo >::value, &n, ap, ipiv, &info );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sptri.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sptri.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sptri.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -54,7 +54,7 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sptri( UpLo, const fortran_int_t n, float* ap,
+inline std::ptrdiff_t sptri( const UpLo uplo, const fortran_int_t n, float* ap,
         const fortran_int_t* ipiv, float* work ) {
     fortran_int_t info(0);
     LAPACK_SSPTRI( &lapack_option< UpLo >::value, &n, ap, ipiv, work, &info );
@@ -67,8 +67,8 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sptri( UpLo, const fortran_int_t n, double* ap,
-        const fortran_int_t* ipiv, double* work ) {
+inline std::ptrdiff_t sptri( const UpLo uplo, const fortran_int_t n,
+        double* ap, const fortran_int_t* ipiv, double* work ) {
     fortran_int_t info(0);
     LAPACK_DSPTRI( &lapack_option< UpLo >::value, &n, ap, ipiv, work, &info );
     return info;
@@ -80,7 +80,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sptri( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t sptri( const UpLo uplo, const fortran_int_t n,
         std::complex<float>* ap, const fortran_int_t* ipiv,
         std::complex<float>* work ) {
     fortran_int_t info(0);
@@ -94,7 +94,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sptri( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t sptri( const UpLo uplo, const fortran_int_t n,
         std::complex<double>* ap, const fortran_int_t* ipiv,
         std::complex<double>* work ) {
     fortran_int_t info(0);
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sptrs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sptrs.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sptrs.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -49,7 +49,7 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sptrs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t sptrs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const float* ap, const fortran_int_t* ipiv,
         float* b, const fortran_int_t ldb ) {
     fortran_int_t info(0);
@@ -64,7 +64,7 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sptrs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t sptrs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const double* ap, const fortran_int_t* ipiv,
         double* b, const fortran_int_t ldb ) {
     fortran_int_t info(0);
@@ -79,7 +79,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sptrs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t sptrs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<float>* ap,
         const fortran_int_t* ipiv, std::complex<float>* b,
         const fortran_int_t ldb ) {
@@ -95,7 +95,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sptrs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t sptrs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<double>* ap,
         const fortran_int_t* ipiv, std::complex<double>* b,
         const fortran_int_t ldb ) {
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/stedc.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/stedc.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/stedc.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -215,8 +215,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 
     //
@@ -332,16 +333,18 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 
     //
     // Static member function that returns the minimum size of
     // workspace-array rwork.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_rwork( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 
     //
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sycon.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sycon.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sycon.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -54,9 +54,9 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sycon( UpLo, const fortran_int_t n, const float* a,
-        const fortran_int_t lda, const fortran_int_t* ipiv, const float anorm,
-        float& rcond, float* work, fortran_int_t* iwork ) {
+inline std::ptrdiff_t sycon( const UpLo uplo, const fortran_int_t n,
+        const float* a, const fortran_int_t lda, const fortran_int_t* ipiv,
+        const float anorm, float& rcond, float* work, fortran_int_t* iwork ) {
     fortran_int_t info(0);
     LAPACK_SSYCON( &lapack_option< UpLo >::value, &n, a, &lda, ipiv, &anorm,
             &rcond, work, iwork, &info );
@@ -69,8 +69,8 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sycon( UpLo, const fortran_int_t n, const double* a,
-        const fortran_int_t lda, const fortran_int_t* ipiv,
+inline std::ptrdiff_t sycon( const UpLo uplo, const fortran_int_t n,
+        const double* a, const fortran_int_t lda, const fortran_int_t* ipiv,
         const double anorm, double& rcond, double* work,
         fortran_int_t* iwork ) {
     fortran_int_t info(0);
@@ -85,7 +85,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sycon( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t sycon( const UpLo uplo, const fortran_int_t n,
         const std::complex<float>* a, const fortran_int_t lda,
         const fortran_int_t* ipiv, const float anorm, float& rcond,
         std::complex<float>* work ) {
@@ -101,7 +101,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sycon( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t sycon( const UpLo uplo, const fortran_int_t n,
         const std::complex<double>* a, const fortran_int_t lda,
         const fortran_int_t* ipiv, const double anorm, double& rcond,
         std::complex<double>* work ) {
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sygst.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sygst.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sygst.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -49,7 +49,7 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sygst( const fortran_int_t itype, UpLo,
+inline std::ptrdiff_t sygst( const fortran_int_t itype, const UpLo uplo,
         const fortran_int_t n, float* a, const fortran_int_t lda,
         const float* b, const fortran_int_t ldb ) {
     fortran_int_t info(0);
@@ -64,7 +64,7 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sygst( const fortran_int_t itype, UpLo,
+inline std::ptrdiff_t sygst( const fortran_int_t itype, const UpLo uplo,
         const fortran_int_t n, double* a, const fortran_int_t lda,
         const double* b, const fortran_int_t ldb ) {
     fortran_int_t info(0);
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/syrfs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/syrfs.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/syrfs.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -54,7 +54,7 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t syrfs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t syrfs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const float* a, const fortran_int_t lda,
         const float* af, const fortran_int_t ldaf, const fortran_int_t* ipiv,
         const float* b, const fortran_int_t ldb, float* x,
@@ -72,7 +72,7 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t syrfs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t syrfs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const double* a, const fortran_int_t lda,
         const double* af, const fortran_int_t ldaf, const fortran_int_t* ipiv,
         const double* b, const fortran_int_t ldb, double* x,
@@ -90,7 +90,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t syrfs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t syrfs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<float>* a,
         const fortran_int_t lda, const std::complex<float>* af,
         const fortran_int_t ldaf, const fortran_int_t* ipiv,
@@ -109,7 +109,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t syrfs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t syrfs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<double>* a,
         const fortran_int_t lda, const std::complex<double>* af,
         const fortran_int_t ldaf, const fortran_int_t* ipiv,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytrd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytrd.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytrd.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,7 +52,7 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sytrd( UpLo, const fortran_int_t n, float* a,
+inline std::ptrdiff_t sytrd( const UpLo uplo, const fortran_int_t n, float* a,
         const fortran_int_t lda, float* d, float* e, float* tau, float* work,
         const fortran_int_t lwork ) {
     fortran_int_t info(0);
@@ -67,7 +67,7 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sytrd( UpLo, const fortran_int_t n, double* a,
+inline std::ptrdiff_t sytrd( const UpLo uplo, const fortran_int_t n, double* a,
         const fortran_int_t lda, double* d, double* e, double* tau,
         double* work, const fortran_int_t lwork ) {
     fortran_int_t info(0);
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytrf.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytrf.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytrf.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -55,7 +55,7 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sytrf( UpLo, const fortran_int_t n, float* a,
+inline std::ptrdiff_t sytrf( const UpLo uplo, const fortran_int_t n, float* a,
         const fortran_int_t lda, fortran_int_t* ipiv, float* work,
         const fortran_int_t lwork ) {
     fortran_int_t info(0);
@@ -70,7 +70,7 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sytrf( UpLo, const fortran_int_t n, double* a,
+inline std::ptrdiff_t sytrf( const UpLo uplo, const fortran_int_t n, double* a,
         const fortran_int_t lda, fortran_int_t* ipiv, double* work,
         const fortran_int_t lwork ) {
     fortran_int_t info(0);
@@ -85,7 +85,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sytrf( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t sytrf( const UpLo uplo, const fortran_int_t n,
         std::complex<float>* a, const fortran_int_t lda, fortran_int_t* ipiv,
         std::complex<float>* work, const fortran_int_t lwork ) {
     fortran_int_t info(0);
@@ -100,7 +100,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sytrf( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t sytrf( const UpLo uplo, const fortran_int_t n,
         std::complex<double>* a, const fortran_int_t lda, fortran_int_t* ipiv,
         std::complex<double>* work, const fortran_int_t lwork ) {
     fortran_int_t info(0);
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytri.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytri.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytri.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -54,7 +54,7 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sytri( UpLo, const fortran_int_t n, float* a,
+inline std::ptrdiff_t sytri( const UpLo uplo, const fortran_int_t n, float* a,
         const fortran_int_t lda, const fortran_int_t* ipiv, float* work ) {
     fortran_int_t info(0);
     LAPACK_SSYTRI( &lapack_option< UpLo >::value, &n, a, &lda, ipiv, work,
@@ -68,7 +68,7 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sytri( UpLo, const fortran_int_t n, double* a,
+inline std::ptrdiff_t sytri( const UpLo uplo, const fortran_int_t n, double* a,
         const fortran_int_t lda, const fortran_int_t* ipiv, double* work ) {
     fortran_int_t info(0);
     LAPACK_DSYTRI( &lapack_option< UpLo >::value, &n, a, &lda, ipiv, work,
@@ -82,7 +82,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sytri( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t sytri( const UpLo uplo, const fortran_int_t n,
         std::complex<float>* a, const fortran_int_t lda,
         const fortran_int_t* ipiv, std::complex<float>* work ) {
     fortran_int_t info(0);
@@ -97,7 +97,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sytri( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t sytri( const UpLo uplo, const fortran_int_t n,
         std::complex<double>* a, const fortran_int_t lda,
         const fortran_int_t* ipiv, std::complex<double>* work ) {
     fortran_int_t info(0);
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytrs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytrs.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/sytrs.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -49,7 +49,7 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sytrs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t sytrs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const float* a, const fortran_int_t lda,
         const fortran_int_t* ipiv, float* b, const fortran_int_t ldb ) {
     fortran_int_t info(0);
@@ -64,7 +64,7 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sytrs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t sytrs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const double* a, const fortran_int_t lda,
         const fortran_int_t* ipiv, double* b, const fortran_int_t ldb ) {
     fortran_int_t info(0);
@@ -79,7 +79,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sytrs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t sytrs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<float>* a,
         const fortran_int_t lda, const fortran_int_t* ipiv,
         std::complex<float>* b, const fortran_int_t ldb ) {
@@ -95,7 +95,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sytrs( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t sytrs( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, const std::complex<double>* a,
         const fortran_int_t lda, const fortran_int_t* ipiv,
         std::complex<double>* b, const fortran_int_t ldb ) {
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tbcon.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tbcon.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tbcon.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -56,7 +56,7 @@
 // * float value-type.
 //
 template< typename UpLo, typename Diag >
-inline std::ptrdiff_t tbcon( const char norm, UpLo, Diag,
+inline std::ptrdiff_t tbcon( const char norm, const UpLo uplo, const Diag diag,
         const fortran_int_t n, const fortran_int_t kd, const float* ab,
         const fortran_int_t ldab, float& rcond, float* work,
         fortran_int_t* iwork ) {
@@ -72,7 +72,7 @@
 // * double value-type.
 //
 template< typename UpLo, typename Diag >
-inline std::ptrdiff_t tbcon( const char norm, UpLo, Diag,
+inline std::ptrdiff_t tbcon( const char norm, const UpLo uplo, const Diag diag,
         const fortran_int_t n, const fortran_int_t kd, const double* ab,
         const fortran_int_t ldab, double& rcond, double* work,
         fortran_int_t* iwork ) {
@@ -88,7 +88,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo, typename Diag >
-inline std::ptrdiff_t tbcon( const char norm, UpLo, Diag,
+inline std::ptrdiff_t tbcon( const char norm, const UpLo uplo, const Diag diag,
         const fortran_int_t n, const fortran_int_t kd,
         const std::complex<float>* ab, const fortran_int_t ldab, float& rcond,
         std::complex<float>* work, float* rwork ) {
@@ -104,7 +104,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo, typename Diag >
-inline std::ptrdiff_t tbcon( const char norm, UpLo, Diag,
+inline std::ptrdiff_t tbcon( const char norm, const UpLo uplo, const Diag diag,
         const fortran_int_t n, const fortran_int_t kd,
         const std::complex<double>* ab, const fortran_int_t ldab,
         double& rcond, std::complex<double>* work, double* rwork ) {
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tbrfs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tbrfs.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tbrfs.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -57,11 +57,12 @@
 // * float value-type.
 //
 template< typename UpLo, typename Trans, typename Diag >
-inline std::ptrdiff_t tbrfs( UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t kd, const fortran_int_t nrhs, const float* ab,
-        const fortran_int_t ldab, const float* b, const fortran_int_t ldb,
-        const float* x, const fortran_int_t ldx, float* ferr, float* berr,
-        float* work, fortran_int_t* iwork ) {
+inline std::ptrdiff_t tbrfs( const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t kd,
+        const fortran_int_t nrhs, const float* ab, const fortran_int_t ldab,
+        const float* b, const fortran_int_t ldb, const float* x,
+        const fortran_int_t ldx, float* ferr, float* berr, float* work,
+        fortran_int_t* iwork ) {
     fortran_int_t info(0);
     LAPACK_STBRFS( &lapack_option< UpLo >::value, &lapack_option<
             Trans >::value, &lapack_option< Diag >::value, &n, &kd, &nrhs, ab,
@@ -75,11 +76,12 @@
 // * double value-type.
 //
 template< typename UpLo, typename Trans, typename Diag >
-inline std::ptrdiff_t tbrfs( UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t kd, const fortran_int_t nrhs, const double* ab,
-        const fortran_int_t ldab, const double* b, const fortran_int_t ldb,
-        const double* x, const fortran_int_t ldx, double* ferr, double* berr,
-        double* work, fortran_int_t* iwork ) {
+inline std::ptrdiff_t tbrfs( const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t kd,
+        const fortran_int_t nrhs, const double* ab, const fortran_int_t ldab,
+        const double* b, const fortran_int_t ldb, const double* x,
+        const fortran_int_t ldx, double* ferr, double* berr, double* work,
+        fortran_int_t* iwork ) {
     fortran_int_t info(0);
     LAPACK_DTBRFS( &lapack_option< UpLo >::value, &lapack_option<
             Trans >::value, &lapack_option< Diag >::value, &n, &kd, &nrhs, ab,
@@ -93,12 +95,13 @@
 // * complex<float> value-type.
 //
 template< typename UpLo, typename Trans, typename Diag >
-inline std::ptrdiff_t tbrfs( UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t kd, const fortran_int_t nrhs,
-        const std::complex<float>* ab, const fortran_int_t ldab,
-        const std::complex<float>* b, const fortran_int_t ldb,
-        const std::complex<float>* x, const fortran_int_t ldx, float* ferr,
-        float* berr, std::complex<float>* work, float* rwork ) {
+inline std::ptrdiff_t tbrfs( const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t kd,
+        const fortran_int_t nrhs, const std::complex<float>* ab,
+        const fortran_int_t ldab, const std::complex<float>* b,
+        const fortran_int_t ldb, const std::complex<float>* x,
+        const fortran_int_t ldx, float* ferr, float* berr,
+        std::complex<float>* work, float* rwork ) {
     fortran_int_t info(0);
     LAPACK_CTBRFS( &lapack_option< UpLo >::value, &lapack_option<
             Trans >::value, &lapack_option< Diag >::value, &n, &kd, &nrhs, ab,
@@ -112,12 +115,13 @@
 // * complex<double> value-type.
 //
 template< typename UpLo, typename Trans, typename Diag >
-inline std::ptrdiff_t tbrfs( UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t kd, const fortran_int_t nrhs,
-        const std::complex<double>* ab, const fortran_int_t ldab,
-        const std::complex<double>* b, const fortran_int_t ldb,
-        const std::complex<double>* x, const fortran_int_t ldx, double* ferr,
-        double* berr, std::complex<double>* work, double* rwork ) {
+inline std::ptrdiff_t tbrfs( const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t kd,
+        const fortran_int_t nrhs, const std::complex<double>* ab,
+        const fortran_int_t ldab, const std::complex<double>* b,
+        const fortran_int_t ldb, const std::complex<double>* x,
+        const fortran_int_t ldx, double* ferr, double* berr,
+        std::complex<double>* work, double* rwork ) {
     fortran_int_t info(0);
     LAPACK_ZTBRFS( &lapack_option< UpLo >::value, &lapack_option<
             Trans >::value, &lapack_option< Diag >::value, &n, &kd, &nrhs, ab,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tbtrs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tbtrs.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tbtrs.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,9 +52,10 @@
 // * float value-type.
 //
 template< typename UpLo, typename Trans, typename Diag >
-inline std::ptrdiff_t tbtrs( UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t kd, const fortran_int_t nrhs, const float* ab,
-        const fortran_int_t ldab, float* b, const fortran_int_t ldb ) {
+inline std::ptrdiff_t tbtrs( const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t kd,
+        const fortran_int_t nrhs, const float* ab, const fortran_int_t ldab,
+        float* b, const fortran_int_t ldb ) {
     fortran_int_t info(0);
     LAPACK_STBTRS( &lapack_option< UpLo >::value, &lapack_option<
             Trans >::value, &lapack_option< Diag >::value, &n, &kd, &nrhs, ab,
@@ -68,9 +69,10 @@
 // * double value-type.
 //
 template< typename UpLo, typename Trans, typename Diag >
-inline std::ptrdiff_t tbtrs( UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t kd, const fortran_int_t nrhs, const double* ab,
-        const fortran_int_t ldab, double* b, const fortran_int_t ldb ) {
+inline std::ptrdiff_t tbtrs( const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t kd,
+        const fortran_int_t nrhs, const double* ab, const fortran_int_t ldab,
+        double* b, const fortran_int_t ldb ) {
     fortran_int_t info(0);
     LAPACK_DTBTRS( &lapack_option< UpLo >::value, &lapack_option<
             Trans >::value, &lapack_option< Diag >::value, &n, &kd, &nrhs, ab,
@@ -84,10 +86,11 @@
 // * complex<float> value-type.
 //
 template< typename UpLo, typename Trans, typename Diag >
-inline std::ptrdiff_t tbtrs( UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t kd, const fortran_int_t nrhs,
-        const std::complex<float>* ab, const fortran_int_t ldab,
-        std::complex<float>* b, const fortran_int_t ldb ) {
+inline std::ptrdiff_t tbtrs( const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t kd,
+        const fortran_int_t nrhs, const std::complex<float>* ab,
+        const fortran_int_t ldab, std::complex<float>* b,
+        const fortran_int_t ldb ) {
     fortran_int_t info(0);
     LAPACK_CTBTRS( &lapack_option< UpLo >::value, &lapack_option<
             Trans >::value, &lapack_option< Diag >::value, &n, &kd, &nrhs, ab,
@@ -101,10 +104,11 @@
 // * complex<double> value-type.
 //
 template< typename UpLo, typename Trans, typename Diag >
-inline std::ptrdiff_t tbtrs( UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t kd, const fortran_int_t nrhs,
-        const std::complex<double>* ab, const fortran_int_t ldab,
-        std::complex<double>* b, const fortran_int_t ldb ) {
+inline std::ptrdiff_t tbtrs( const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t kd,
+        const fortran_int_t nrhs, const std::complex<double>* ab,
+        const fortran_int_t ldab, std::complex<double>* b,
+        const fortran_int_t ldb ) {
     fortran_int_t info(0);
     LAPACK_ZTBTRS( &lapack_option< UpLo >::value, &lapack_option<
             Trans >::value, &lapack_option< Diag >::value, &n, &kd, &nrhs, ab,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgevc.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgevc.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgevc.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,15 +52,16 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * float value-type.
 //
-inline std::ptrdiff_t tgevc( const char side, const char howmny,
+template< typename Side >
+inline std::ptrdiff_t tgevc( const Side side, const char howmny,
         const logical_t* select, const fortran_int_t n, const float* s,
         const fortran_int_t lds, const float* p, const fortran_int_t ldp,
         float* vl, const fortran_int_t ldvl, float* vr,
         const fortran_int_t ldvr, const fortran_int_t mm, fortran_int_t& m,
         float* work ) {
     fortran_int_t info(0);
-    LAPACK_STGEVC( &side, &howmny, select, &n, s, &lds, p, &ldp, vl, &ldvl,
-            vr, &ldvr, &mm, &m, work, &info );
+    LAPACK_STGEVC( &lapack_option< Side >::value, &howmny, select, &n, s,
+            &lds, p, &ldp, vl, &ldvl, vr, &ldvr, &mm, &m, work, &info );
     return info;
 }
 
@@ -69,15 +70,16 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * double value-type.
 //
-inline std::ptrdiff_t tgevc( const char side, const char howmny,
+template< typename Side >
+inline std::ptrdiff_t tgevc( const Side side, const char howmny,
         const logical_t* select, const fortran_int_t n, const double* s,
         const fortran_int_t lds, const double* p, const fortran_int_t ldp,
         double* vl, const fortran_int_t ldvl, double* vr,
         const fortran_int_t ldvr, const fortran_int_t mm, fortran_int_t& m,
         double* work ) {
     fortran_int_t info(0);
-    LAPACK_DTGEVC( &side, &howmny, select, &n, s, &lds, p, &ldp, vl, &ldvl,
-            vr, &ldvr, &mm, &m, work, &info );
+    LAPACK_DTGEVC( &lapack_option< Side >::value, &howmny, select, &n, s,
+            &lds, p, &ldp, vl, &ldvl, vr, &ldvr, &mm, &m, work, &info );
     return info;
 }
 
@@ -86,7 +88,8 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<float> value-type.
 //
-inline std::ptrdiff_t tgevc( const char side, const char howmny,
+template< typename Side >
+inline std::ptrdiff_t tgevc( const Side side, const char howmny,
         const logical_t* select, const fortran_int_t n,
         const std::complex<float>* s, const fortran_int_t lds,
         const std::complex<float>* p, const fortran_int_t ldp,
@@ -95,8 +98,8 @@
         const fortran_int_t mm, fortran_int_t& m, std::complex<float>* work,
         float* rwork ) {
     fortran_int_t info(0);
-    LAPACK_CTGEVC( &side, &howmny, select, &n, s, &lds, p, &ldp, vl, &ldvl,
-            vr, &ldvr, &mm, &m, work, rwork, &info );
+    LAPACK_CTGEVC( &lapack_option< Side >::value, &howmny, select, &n, s,
+            &lds, p, &ldp, vl, &ldvl, vr, &ldvr, &mm, &m, work, rwork, &info );
     return info;
 }
 
@@ -105,7 +108,8 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<double> value-type.
 //
-inline std::ptrdiff_t tgevc( const char side, const char howmny,
+template< typename Side >
+inline std::ptrdiff_t tgevc( const Side side, const char howmny,
         const logical_t* select, const fortran_int_t n,
         const std::complex<double>* s, const fortran_int_t lds,
         const std::complex<double>* p, const fortran_int_t ldp,
@@ -114,8 +118,8 @@
         const fortran_int_t mm, fortran_int_t& m, std::complex<double>* work,
         double* rwork ) {
     fortran_int_t info(0);
-    LAPACK_ZTGEVC( &side, &howmny, select, &n, s, &lds, p, &ldp, vl, &ldvl,
-            vr, &ldvr, &mm, &m, work, rwork, &info );
+    LAPACK_ZTGEVC( &lapack_option< Side >::value, &howmny, select, &n, s,
+            &lds, p, &ldp, vl, &ldvl, vr, &ldvr, &mm, &m, work, rwork, &info );
     return info;
 }
 
@@ -143,9 +147,10 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename VectorSELECT, typename MatrixS, typename MatrixP,
-            typename MatrixVL, typename MatrixVR, typename WORK >
-    static std::ptrdiff_t invoke( const char side, const char howmny,
+    template< typename Side, typename VectorSELECT, typename MatrixS,
+            typename MatrixP, typename MatrixVL, typename MatrixVR,
+            typename WORK >
+    static std::ptrdiff_t invoke( const Side side, const char howmny,
             const VectorSELECT& select, const MatrixS& s, const MatrixP& p,
             MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
             fortran_int_t& m, detail::workspace1< WORK > work ) {
@@ -180,7 +185,6 @@
         BOOST_ASSERT( bindings::stride_major(s) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_column(s)) );
         BOOST_ASSERT( howmny == 'A' || howmny == 'B' || howmny == 'S' );
-        BOOST_ASSERT( side == 'R' || side == 'L' || side == 'B' );
         return detail::tgevc( side, howmny, bindings::begin_value(select),
                 bindings::size_column(s), bindings::begin_value(s),
                 bindings::stride_major(s), bindings::begin_value(p),
@@ -197,9 +201,9 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename VectorSELECT, typename MatrixS, typename MatrixP,
-            typename MatrixVL, typename MatrixVR >
-    static std::ptrdiff_t invoke( const char side, const char howmny,
+    template< typename Side, typename VectorSELECT, typename MatrixS,
+            typename MatrixP, typename MatrixVL, typename MatrixVR >
+    static std::ptrdiff_t invoke( const Side side, const char howmny,
             const VectorSELECT& select, const MatrixS& s, const MatrixP& p,
             MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
             fortran_int_t& m, minimal_workspace work ) {
@@ -217,9 +221,9 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename VectorSELECT, typename MatrixS, typename MatrixP,
-            typename MatrixVL, typename MatrixVR >
-    static std::ptrdiff_t invoke( const char side, const char howmny,
+    template< typename Side, typename VectorSELECT, typename MatrixS,
+            typename MatrixP, typename MatrixVL, typename MatrixVR >
+    static std::ptrdiff_t invoke( const Side side, const char howmny,
             const VectorSELECT& select, const MatrixS& s, const MatrixP& p,
             MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
             fortran_int_t& m, optimal_workspace work ) {
@@ -252,10 +256,10 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename VectorSELECT, typename MatrixS, typename MatrixP,
-            typename MatrixVL, typename MatrixVR, typename WORK,
-            typename RWORK >
-    static std::ptrdiff_t invoke( const char side, const char howmny,
+    template< typename Side, typename VectorSELECT, typename MatrixS,
+            typename MatrixP, typename MatrixVL, typename MatrixVR,
+            typename WORK, typename RWORK >
+    static std::ptrdiff_t invoke( const Side side, const char howmny,
             const VectorSELECT& select, const MatrixS& s, const MatrixP& p,
             MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
             fortran_int_t& m, detail::workspace2< WORK, RWORK > work ) {
@@ -292,7 +296,6 @@
         BOOST_ASSERT( bindings::stride_major(s) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_column(s)) );
         BOOST_ASSERT( howmny == 'A' || howmny == 'B' || howmny == 'S' );
-        BOOST_ASSERT( side == 'R' || side == 'L' || side == 'B' );
         return detail::tgevc( side, howmny, bindings::begin_value(select),
                 bindings::size_column(s), bindings::begin_value(s),
                 bindings::stride_major(s), bindings::begin_value(p),
@@ -310,9 +313,9 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename VectorSELECT, typename MatrixS, typename MatrixP,
-            typename MatrixVL, typename MatrixVR >
-    static std::ptrdiff_t invoke( const char side, const char howmny,
+    template< typename Side, typename VectorSELECT, typename MatrixS,
+            typename MatrixP, typename MatrixVL, typename MatrixVR >
+    static std::ptrdiff_t invoke( const Side side, const char howmny,
             const VectorSELECT& select, const MatrixS& s, const MatrixP& p,
             MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
             fortran_int_t& m, minimal_workspace work ) {
@@ -332,9 +335,9 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename VectorSELECT, typename MatrixS, typename MatrixP,
-            typename MatrixVL, typename MatrixVR >
-    static std::ptrdiff_t invoke( const char side, const char howmny,
+    template< typename Side, typename VectorSELECT, typename MatrixS,
+            typename MatrixP, typename MatrixVL, typename MatrixVR >
+    static std::ptrdiff_t invoke( const Side side, const char howmny,
             const VectorSELECT& select, const MatrixS& s, const MatrixP& p,
             MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
             fortran_int_t& m, optimal_workspace work ) {
@@ -376,11 +379,12 @@
 // * MatrixVR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixS, typename MatrixP,
-        typename MatrixVL, typename MatrixVR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixS,
+        typename MatrixP, typename MatrixVL, typename MatrixVR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-tgevc( const char side, const char howmny, const VectorSELECT& select,
+tgevc( const Side side, const char howmny, const VectorSELECT& select,
         const MatrixS& s, const MatrixP& p, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m, Workspace work ) {
     return tgevc_impl< typename bindings::value_type<
@@ -394,11 +398,11 @@
 // * MatrixVR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixS, typename MatrixP,
-        typename MatrixVL, typename MatrixVR >
+template< typename Side, typename VectorSELECT, typename MatrixS,
+        typename MatrixP, typename MatrixVL, typename MatrixVR >
 inline typename boost::disable_if< detail::is_workspace< MatrixVR >,
         std::ptrdiff_t >::type
-tgevc( const char side, const char howmny, const VectorSELECT& select,
+tgevc( const Side side, const char howmny, const VectorSELECT& select,
         const MatrixS& s, const MatrixP& p, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m ) {
     return tgevc_impl< typename bindings::value_type<
@@ -412,11 +416,12 @@
 // * MatrixVR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixS, typename MatrixP,
-        typename MatrixVL, typename MatrixVR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixS,
+        typename MatrixP, typename MatrixVL, typename MatrixVR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-tgevc( const char side, const char howmny, const VectorSELECT& select,
+tgevc( const Side side, const char howmny, const VectorSELECT& select,
         const MatrixS& s, const MatrixP& p, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m, Workspace work ) {
     return tgevc_impl< typename bindings::value_type<
@@ -430,11 +435,11 @@
 // * MatrixVR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixS, typename MatrixP,
-        typename MatrixVL, typename MatrixVR >
+template< typename Side, typename VectorSELECT, typename MatrixS,
+        typename MatrixP, typename MatrixVL, typename MatrixVR >
 inline typename boost::disable_if< detail::is_workspace< MatrixVR >,
         std::ptrdiff_t >::type
-tgevc( const char side, const char howmny, const VectorSELECT& select,
+tgevc( const Side side, const char howmny, const VectorSELECT& select,
         const MatrixS& s, const MatrixP& p, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m ) {
     return tgevc_impl< typename bindings::value_type<
@@ -448,11 +453,12 @@
 // * const MatrixVR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixS, typename MatrixP,
-        typename MatrixVL, typename MatrixVR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixS,
+        typename MatrixP, typename MatrixVL, typename MatrixVR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-tgevc( const char side, const char howmny, const VectorSELECT& select,
+tgevc( const Side side, const char howmny, const VectorSELECT& select,
         const MatrixS& s, const MatrixP& p, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m, Workspace work ) {
     return tgevc_impl< typename bindings::value_type<
@@ -466,11 +472,11 @@
 // * const MatrixVR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixS, typename MatrixP,
-        typename MatrixVL, typename MatrixVR >
+template< typename Side, typename VectorSELECT, typename MatrixS,
+        typename MatrixP, typename MatrixVL, typename MatrixVR >
 inline typename boost::disable_if< detail::is_workspace< MatrixVR >,
         std::ptrdiff_t >::type
-tgevc( const char side, const char howmny, const VectorSELECT& select,
+tgevc( const Side side, const char howmny, const VectorSELECT& select,
         const MatrixS& s, const MatrixP& p, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m ) {
     return tgevc_impl< typename bindings::value_type<
@@ -484,11 +490,12 @@
 // * const MatrixVR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixS, typename MatrixP,
-        typename MatrixVL, typename MatrixVR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixS,
+        typename MatrixP, typename MatrixVL, typename MatrixVR,
+        typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-tgevc( const char side, const char howmny, const VectorSELECT& select,
+tgevc( const Side side, const char howmny, const VectorSELECT& select,
         const MatrixS& s, const MatrixP& p, const MatrixVL& vl,
         const MatrixVR& vr, const fortran_int_t mm, fortran_int_t& m,
         Workspace work ) {
@@ -503,11 +510,11 @@
 // * const MatrixVR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixS, typename MatrixP,
-        typename MatrixVL, typename MatrixVR >
+template< typename Side, typename VectorSELECT, typename MatrixS,
+        typename MatrixP, typename MatrixVL, typename MatrixVR >
 inline typename boost::disable_if< detail::is_workspace< MatrixVR >,
         std::ptrdiff_t >::type
-tgevc( const char side, const char howmny, const VectorSELECT& select,
+tgevc( const Side side, const char howmny, const VectorSELECT& select,
         const MatrixS& s, const MatrixP& p, const MatrixVL& vl,
         const MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m ) {
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgsen.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgsen.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgsen.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -304,16 +304,18 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 
     //
     // Static member function that returns the minimum size of
     // workspace-array iwork.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_iwork( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
@@ -468,16 +470,18 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 
     //
     // Static member function that returns the minimum size of
     // workspace-array iwork.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_iwork( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgsna.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgsna.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgsna.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -272,16 +272,18 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 
     //
     // Static member function that returns the minimum size of
     // workspace-array iwork.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_iwork( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
@@ -408,16 +410,18 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 
     //
     // Static member function that returns the minimum size of
     // workspace-array iwork.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_iwork( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgsyl.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgsyl.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tgsyl.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -55,7 +55,7 @@
 // * float value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t tgsyl( Trans, const fortran_int_t ijob,
+inline std::ptrdiff_t tgsyl( const Trans trans, const fortran_int_t ijob,
         const fortran_int_t m, const fortran_int_t n, const float* a,
         const fortran_int_t lda, const float* b, const fortran_int_t ldb,
         float* c, const fortran_int_t ldc, const float* d,
@@ -75,7 +75,7 @@
 // * double value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t tgsyl( Trans, const fortran_int_t ijob,
+inline std::ptrdiff_t tgsyl( const Trans trans, const fortran_int_t ijob,
         const fortran_int_t m, const fortran_int_t n, const double* a,
         const fortran_int_t lda, const double* b, const fortran_int_t ldb,
         double* c, const fortran_int_t ldc, const double* d,
@@ -95,7 +95,7 @@
 // * complex<float> value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t tgsyl( Trans, const fortran_int_t ijob,
+inline std::ptrdiff_t tgsyl( const Trans trans, const fortran_int_t ijob,
         const fortran_int_t m, const fortran_int_t n,
         const std::complex<float>* a, const fortran_int_t lda,
         const std::complex<float>* b, const fortran_int_t ldb,
@@ -118,7 +118,7 @@
 // * complex<double> value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t tgsyl( Trans, const fortran_int_t ijob,
+inline std::ptrdiff_t tgsyl( const Trans trans, const fortran_int_t ijob,
         const fortran_int_t m, const fortran_int_t n,
         const std::complex<double>* a, const fortran_int_t lda,
         const std::complex<double>* b, const fortran_int_t ldb,
@@ -282,8 +282,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 
     //
@@ -434,8 +435,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 
     //
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tpcon.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tpcon.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tpcon.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -55,7 +55,7 @@
 // * float value-type.
 //
 template< typename UpLo, typename Diag >
-inline std::ptrdiff_t tpcon( const char norm, UpLo, Diag,
+inline std::ptrdiff_t tpcon( const char norm, const UpLo uplo, const Diag diag,
         const fortran_int_t n, const float* ap, float& rcond, float* work,
         fortran_int_t* iwork ) {
     fortran_int_t info(0);
@@ -70,7 +70,7 @@
 // * double value-type.
 //
 template< typename UpLo, typename Diag >
-inline std::ptrdiff_t tpcon( const char norm, UpLo, Diag,
+inline std::ptrdiff_t tpcon( const char norm, const UpLo uplo, const Diag diag,
         const fortran_int_t n, const double* ap, double& rcond, double* work,
         fortran_int_t* iwork ) {
     fortran_int_t info(0);
@@ -85,7 +85,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo, typename Diag >
-inline std::ptrdiff_t tpcon( const char norm, UpLo, Diag,
+inline std::ptrdiff_t tpcon( const char norm, const UpLo uplo, const Diag diag,
         const fortran_int_t n, const std::complex<float>* ap, float& rcond,
         std::complex<float>* work, float* rwork ) {
     fortran_int_t info(0);
@@ -100,7 +100,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo, typename Diag >
-inline std::ptrdiff_t tpcon( const char norm, UpLo, Diag,
+inline std::ptrdiff_t tpcon( const char norm, const UpLo uplo, const Diag diag,
         const fortran_int_t n, const std::complex<double>* ap, double& rcond,
         std::complex<double>* work, double* rwork ) {
     fortran_int_t info(0);
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tprfs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tprfs.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tprfs.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -56,10 +56,11 @@
 // * float value-type.
 //
 template< typename UpLo, typename Trans, typename Diag >
-inline std::ptrdiff_t tprfs( UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t nrhs, const float* ap, const float* b,
-        const fortran_int_t ldb, const float* x, const fortran_int_t ldx,
-        float* ferr, float* berr, float* work, fortran_int_t* iwork ) {
+inline std::ptrdiff_t tprfs( const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t nrhs,
+        const float* ap, const float* b, const fortran_int_t ldb,
+        const float* x, const fortran_int_t ldx, float* ferr, float* berr,
+        float* work, fortran_int_t* iwork ) {
     fortran_int_t info(0);
     LAPACK_STPRFS( &lapack_option< UpLo >::value, &lapack_option<
             Trans >::value, &lapack_option< Diag >::value, &n, &nrhs, ap, b,
@@ -73,10 +74,11 @@
 // * double value-type.
 //
 template< typename UpLo, typename Trans, typename Diag >
-inline std::ptrdiff_t tprfs( UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t nrhs, const double* ap, const double* b,
-        const fortran_int_t ldb, const double* x, const fortran_int_t ldx,
-        double* ferr, double* berr, double* work, fortran_int_t* iwork ) {
+inline std::ptrdiff_t tprfs( const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t nrhs,
+        const double* ap, const double* b, const fortran_int_t ldb,
+        const double* x, const fortran_int_t ldx, double* ferr, double* berr,
+        double* work, fortran_int_t* iwork ) {
     fortran_int_t info(0);
     LAPACK_DTPRFS( &lapack_option< UpLo >::value, &lapack_option<
             Trans >::value, &lapack_option< Diag >::value, &n, &nrhs, ap, b,
@@ -90,11 +92,12 @@
 // * complex<float> value-type.
 //
 template< typename UpLo, typename Trans, typename Diag >
-inline std::ptrdiff_t tprfs( UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t nrhs, const std::complex<float>* ap,
-        const std::complex<float>* b, const fortran_int_t ldb,
-        const std::complex<float>* x, const fortran_int_t ldx, float* ferr,
-        float* berr, std::complex<float>* work, float* rwork ) {
+inline std::ptrdiff_t tprfs( const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t nrhs,
+        const std::complex<float>* ap, const std::complex<float>* b,
+        const fortran_int_t ldb, const std::complex<float>* x,
+        const fortran_int_t ldx, float* ferr, float* berr,
+        std::complex<float>* work, float* rwork ) {
     fortran_int_t info(0);
     LAPACK_CTPRFS( &lapack_option< UpLo >::value, &lapack_option<
             Trans >::value, &lapack_option< Diag >::value, &n, &nrhs, ap, b,
@@ -108,11 +111,12 @@
 // * complex<double> value-type.
 //
 template< typename UpLo, typename Trans, typename Diag >
-inline std::ptrdiff_t tprfs( UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t nrhs, const std::complex<double>* ap,
-        const std::complex<double>* b, const fortran_int_t ldb,
-        const std::complex<double>* x, const fortran_int_t ldx, double* ferr,
-        double* berr, std::complex<double>* work, double* rwork ) {
+inline std::ptrdiff_t tprfs( const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t nrhs,
+        const std::complex<double>* ap, const std::complex<double>* b,
+        const fortran_int_t ldb, const std::complex<double>* x,
+        const fortran_int_t ldx, double* ferr, double* berr,
+        std::complex<double>* work, double* rwork ) {
     fortran_int_t info(0);
     LAPACK_ZTPRFS( &lapack_option< UpLo >::value, &lapack_option<
             Trans >::value, &lapack_option< Diag >::value, &n, &nrhs, ap, b,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tptri.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tptri.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tptri.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -50,7 +50,8 @@
 // * float value-type.
 //
 template< typename UpLo, typename Diag >
-inline std::ptrdiff_t tptri( UpLo, Diag, const fortran_int_t n, float* ap ) {
+inline std::ptrdiff_t tptri( const UpLo uplo, const Diag diag,
+        const fortran_int_t n, float* ap ) {
     fortran_int_t info(0);
     LAPACK_STPTRI( &lapack_option< UpLo >::value, &lapack_option<
             Diag >::value, &n, ap, &info );
@@ -63,7 +64,8 @@
 // * double value-type.
 //
 template< typename UpLo, typename Diag >
-inline std::ptrdiff_t tptri( UpLo, Diag, const fortran_int_t n, double* ap ) {
+inline std::ptrdiff_t tptri( const UpLo uplo, const Diag diag,
+        const fortran_int_t n, double* ap ) {
     fortran_int_t info(0);
     LAPACK_DTPTRI( &lapack_option< UpLo >::value, &lapack_option<
             Diag >::value, &n, ap, &info );
@@ -76,8 +78,8 @@
 // * complex<float> value-type.
 //
 template< typename UpLo, typename Diag >
-inline std::ptrdiff_t tptri( UpLo, Diag, const fortran_int_t n,
-        std::complex<float>* ap ) {
+inline std::ptrdiff_t tptri( const UpLo uplo, const Diag diag,
+        const fortran_int_t n, std::complex<float>* ap ) {
     fortran_int_t info(0);
     LAPACK_CTPTRI( &lapack_option< UpLo >::value, &lapack_option<
             Diag >::value, &n, ap, &info );
@@ -90,8 +92,8 @@
 // * complex<double> value-type.
 //
 template< typename UpLo, typename Diag >
-inline std::ptrdiff_t tptri( UpLo, Diag, const fortran_int_t n,
-        std::complex<double>* ap ) {
+inline std::ptrdiff_t tptri( const UpLo uplo, const Diag diag,
+        const fortran_int_t n, std::complex<double>* ap ) {
     fortran_int_t info(0);
     LAPACK_ZTPTRI( &lapack_option< UpLo >::value, &lapack_option<
             Diag >::value, &n, ap, &info );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tptrs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tptrs.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tptrs.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -51,9 +51,9 @@
 // * float value-type.
 //
 template< typename UpLo, typename Trans, typename Diag >
-inline std::ptrdiff_t tptrs( UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t nrhs, const float* ap, float* b,
-        const fortran_int_t ldb ) {
+inline std::ptrdiff_t tptrs( const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t nrhs,
+        const float* ap, float* b, const fortran_int_t ldb ) {
     fortran_int_t info(0);
     LAPACK_STPTRS( &lapack_option< UpLo >::value, &lapack_option<
             Trans >::value, &lapack_option< Diag >::value, &n, &nrhs, ap, b,
@@ -67,9 +67,9 @@
 // * double value-type.
 //
 template< typename UpLo, typename Trans, typename Diag >
-inline std::ptrdiff_t tptrs( UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t nrhs, const double* ap, double* b,
-        const fortran_int_t ldb ) {
+inline std::ptrdiff_t tptrs( const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t nrhs,
+        const double* ap, double* b, const fortran_int_t ldb ) {
     fortran_int_t info(0);
     LAPACK_DTPTRS( &lapack_option< UpLo >::value, &lapack_option<
             Trans >::value, &lapack_option< Diag >::value, &n, &nrhs, ap, b,
@@ -83,9 +83,10 @@
 // * complex<float> value-type.
 //
 template< typename UpLo, typename Trans, typename Diag >
-inline std::ptrdiff_t tptrs( UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t nrhs, const std::complex<float>* ap,
-        std::complex<float>* b, const fortran_int_t ldb ) {
+inline std::ptrdiff_t tptrs( const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t nrhs,
+        const std::complex<float>* ap, std::complex<float>* b,
+        const fortran_int_t ldb ) {
     fortran_int_t info(0);
     LAPACK_CTPTRS( &lapack_option< UpLo >::value, &lapack_option<
             Trans >::value, &lapack_option< Diag >::value, &n, &nrhs, ap, b,
@@ -99,9 +100,10 @@
 // * complex<double> value-type.
 //
 template< typename UpLo, typename Trans, typename Diag >
-inline std::ptrdiff_t tptrs( UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t nrhs, const std::complex<double>* ap,
-        std::complex<double>* b, const fortran_int_t ldb ) {
+inline std::ptrdiff_t tptrs( const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t nrhs,
+        const std::complex<double>* ap, std::complex<double>* b,
+        const fortran_int_t ldb ) {
     fortran_int_t info(0);
     LAPACK_ZTPTRS( &lapack_option< UpLo >::value, &lapack_option<
             Trans >::value, &lapack_option< Diag >::value, &n, &nrhs, ap, b,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trcon.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trcon.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trcon.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -55,7 +55,7 @@
 // * float value-type.
 //
 template< typename UpLo, typename Diag >
-inline std::ptrdiff_t trcon( const char norm, UpLo, Diag,
+inline std::ptrdiff_t trcon( const char norm, const UpLo uplo, const Diag diag,
         const fortran_int_t n, const float* a, const fortran_int_t lda,
         float& rcond, float* work, fortran_int_t* iwork ) {
     fortran_int_t info(0);
@@ -70,7 +70,7 @@
 // * double value-type.
 //
 template< typename UpLo, typename Diag >
-inline std::ptrdiff_t trcon( const char norm, UpLo, Diag,
+inline std::ptrdiff_t trcon( const char norm, const UpLo uplo, const Diag diag,
         const fortran_int_t n, const double* a, const fortran_int_t lda,
         double& rcond, double* work, fortran_int_t* iwork ) {
     fortran_int_t info(0);
@@ -85,7 +85,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo, typename Diag >
-inline std::ptrdiff_t trcon( const char norm, UpLo, Diag,
+inline std::ptrdiff_t trcon( const char norm, const UpLo uplo, const Diag diag,
         const fortran_int_t n, const std::complex<float>* a,
         const fortran_int_t lda, float& rcond, std::complex<float>* work,
         float* rwork ) {
@@ -101,7 +101,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo, typename Diag >
-inline std::ptrdiff_t trcon( const char norm, UpLo, Diag,
+inline std::ptrdiff_t trcon( const char norm, const UpLo uplo, const Diag diag,
         const fortran_int_t n, const std::complex<double>* a,
         const fortran_int_t lda, double& rcond, std::complex<double>* work,
         double* rwork ) {
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trevc.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trevc.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trevc.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,14 +52,15 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * float value-type.
 //
-inline std::ptrdiff_t trevc( const char side, const char howmny,
+template< typename Side >
+inline std::ptrdiff_t trevc( const Side side, const char howmny,
         logical_t* select, const fortran_int_t n, const float* t,
         const fortran_int_t ldt, float* vl, const fortran_int_t ldvl,
         float* vr, const fortran_int_t ldvr, const fortran_int_t mm,
         fortran_int_t& m, float* work ) {
     fortran_int_t info(0);
-    LAPACK_STREVC( &side, &howmny, select, &n, t, &ldt, vl, &ldvl, vr, &ldvr,
-            &mm, &m, work, &info );
+    LAPACK_STREVC( &lapack_option< Side >::value, &howmny, select, &n, t,
+            &ldt, vl, &ldvl, vr, &ldvr, &mm, &m, work, &info );
     return info;
 }
 
@@ -68,14 +69,15 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * double value-type.
 //
-inline std::ptrdiff_t trevc( const char side, const char howmny,
+template< typename Side >
+inline std::ptrdiff_t trevc( const Side side, const char howmny,
         logical_t* select, const fortran_int_t n, const double* t,
         const fortran_int_t ldt, double* vl, const fortran_int_t ldvl,
         double* vr, const fortran_int_t ldvr, const fortran_int_t mm,
         fortran_int_t& m, double* work ) {
     fortran_int_t info(0);
-    LAPACK_DTREVC( &side, &howmny, select, &n, t, &ldt, vl, &ldvl, vr, &ldvr,
-            &mm, &m, work, &info );
+    LAPACK_DTREVC( &lapack_option< Side >::value, &howmny, select, &n, t,
+            &ldt, vl, &ldvl, vr, &ldvr, &mm, &m, work, &info );
     return info;
 }
 
@@ -84,7 +86,8 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<float> value-type.
 //
-inline std::ptrdiff_t trevc( const char side, const char howmny,
+template< typename Side >
+inline std::ptrdiff_t trevc( const Side side, const char howmny,
         const logical_t* select, const fortran_int_t n,
         std::complex<float>* t, const fortran_int_t ldt,
         std::complex<float>* vl, const fortran_int_t ldvl,
@@ -92,8 +95,8 @@
         const fortran_int_t mm, fortran_int_t& m, std::complex<float>* work,
         float* rwork ) {
     fortran_int_t info(0);
-    LAPACK_CTREVC( &side, &howmny, select, &n, t, &ldt, vl, &ldvl, vr, &ldvr,
-            &mm, &m, work, rwork, &info );
+    LAPACK_CTREVC( &lapack_option< Side >::value, &howmny, select, &n, t,
+            &ldt, vl, &ldvl, vr, &ldvr, &mm, &m, work, rwork, &info );
     return info;
 }
 
@@ -102,7 +105,8 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<double> value-type.
 //
-inline std::ptrdiff_t trevc( const char side, const char howmny,
+template< typename Side >
+inline std::ptrdiff_t trevc( const Side side, const char howmny,
         const logical_t* select, const fortran_int_t n,
         std::complex<double>* t, const fortran_int_t ldt,
         std::complex<double>* vl, const fortran_int_t ldvl,
@@ -110,8 +114,8 @@
         const fortran_int_t mm, fortran_int_t& m, std::complex<double>* work,
         double* rwork ) {
     fortran_int_t info(0);
-    LAPACK_ZTREVC( &side, &howmny, select, &n, t, &ldt, vl, &ldvl, vr, &ldvr,
-            &mm, &m, work, rwork, &info );
+    LAPACK_ZTREVC( &lapack_option< Side >::value, &howmny, select, &n, t,
+            &ldt, vl, &ldvl, vr, &ldvr, &mm, &m, work, rwork, &info );
     return info;
 }
 
@@ -139,9 +143,9 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-            typename MatrixVR, typename WORK >
-    static std::ptrdiff_t invoke( const char side, const char howmny,
+    template< typename Side, typename VectorSELECT, typename MatrixT,
+            typename MatrixVL, typename MatrixVR, typename WORK >
+    static std::ptrdiff_t invoke( const Side side, const char howmny,
             VectorSELECT& select, const MatrixT& t, MatrixVL& vl,
             MatrixVR& vr, const fortran_int_t mm, fortran_int_t& m,
             detail::workspace1< WORK > work ) {
@@ -169,7 +173,6 @@
         BOOST_ASSERT( bindings::stride_major(t) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_column(t)) );
         BOOST_ASSERT( howmny == 'A' || howmny == 'B' || howmny == 'S' );
-        BOOST_ASSERT( side == 'R' || side == 'L' || side == 'B' );
         return detail::trevc( side, howmny, bindings::begin_value(select),
                 bindings::size_column(t), bindings::begin_value(t),
                 bindings::stride_major(t), bindings::begin_value(vl),
@@ -185,9 +188,9 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-            typename MatrixVR >
-    static std::ptrdiff_t invoke( const char side, const char howmny,
+    template< typename Side, typename VectorSELECT, typename MatrixT,
+            typename MatrixVL, typename MatrixVR >
+    static std::ptrdiff_t invoke( const Side side, const char howmny,
             VectorSELECT& select, const MatrixT& t, MatrixVL& vl,
             MatrixVR& vr, const fortran_int_t mm, fortran_int_t& m,
             minimal_workspace work ) {
@@ -205,9 +208,9 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-            typename MatrixVR >
-    static std::ptrdiff_t invoke( const char side, const char howmny,
+    template< typename Side, typename VectorSELECT, typename MatrixT,
+            typename MatrixVL, typename MatrixVR >
+    static std::ptrdiff_t invoke( const Side side, const char howmny,
             VectorSELECT& select, const MatrixT& t, MatrixVL& vl,
             MatrixVR& vr, const fortran_int_t mm, fortran_int_t& m,
             optimal_workspace work ) {
@@ -240,9 +243,10 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-            typename MatrixVR, typename WORK, typename RWORK >
-    static std::ptrdiff_t invoke( const char side, const char howmny,
+    template< typename Side, typename VectorSELECT, typename MatrixT,
+            typename MatrixVL, typename MatrixVR, typename WORK,
+            typename RWORK >
+    static std::ptrdiff_t invoke( const Side side, const char howmny,
             const VectorSELECT& select, MatrixT& t, MatrixVL& vl,
             MatrixVR& vr, const fortran_int_t mm, fortran_int_t& m,
             detail::workspace2< WORK, RWORK > work ) {
@@ -272,7 +276,6 @@
         BOOST_ASSERT( bindings::stride_major(t) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_column(t)) );
         BOOST_ASSERT( howmny == 'A' || howmny == 'B' || howmny == 'S' );
-        BOOST_ASSERT( side == 'R' || side == 'L' || side == 'B' );
         return detail::trevc( side, howmny, bindings::begin_value(select),
                 bindings::size_column(t), bindings::begin_value(t),
                 bindings::stride_major(t), bindings::begin_value(vl),
@@ -289,9 +292,9 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-            typename MatrixVR >
-    static std::ptrdiff_t invoke( const char side, const char howmny,
+    template< typename Side, typename VectorSELECT, typename MatrixT,
+            typename MatrixVL, typename MatrixVR >
+    static std::ptrdiff_t invoke( const Side side, const char howmny,
             const VectorSELECT& select, MatrixT& t, MatrixVL& vl,
             MatrixVR& vr, const fortran_int_t mm, fortran_int_t& m,
             minimal_workspace work ) {
@@ -311,9 +314,9 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-            typename MatrixVR >
-    static std::ptrdiff_t invoke( const char side, const char howmny,
+    template< typename Side, typename VectorSELECT, typename MatrixT,
+            typename MatrixVL, typename MatrixVR >
+    static std::ptrdiff_t invoke( const Side side, const char howmny,
             const VectorSELECT& select, MatrixT& t, MatrixVL& vl,
             MatrixVR& vr, const fortran_int_t mm, fortran_int_t& m,
             optimal_workspace work ) {
@@ -357,11 +360,11 @@
 // * MatrixVR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, VectorSELECT& select,
+trevc( const Side side, const char howmny, VectorSELECT& select,
         MatrixT& t, MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, Workspace work ) {
     return trevc_impl< typename bindings::value_type<
@@ -377,11 +380,11 @@
 // * MatrixVR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR >
 inline typename boost::disable_if< detail::is_workspace< MatrixVR >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, VectorSELECT& select,
+trevc( const Side side, const char howmny, VectorSELECT& select,
         MatrixT& t, MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m ) {
     return trevc_impl< typename bindings::value_type<
@@ -397,11 +400,11 @@
 // * MatrixVR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, const VectorSELECT& select,
+trevc( const Side side, const char howmny, const VectorSELECT& select,
         MatrixT& t, MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m, Workspace work ) {
     return trevc_impl< typename bindings::value_type<
@@ -417,11 +420,11 @@
 // * MatrixVR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR >
 inline typename boost::disable_if< detail::is_workspace< MatrixVR >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, const VectorSELECT& select,
+trevc( const Side side, const char howmny, const VectorSELECT& select,
         MatrixT& t, MatrixVL& vl, MatrixVR& vr, const fortran_int_t mm,
         fortran_int_t& m ) {
     return trevc_impl< typename bindings::value_type<
@@ -437,11 +440,11 @@
 // * MatrixVR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, VectorSELECT& select,
+trevc( const Side side, const char howmny, VectorSELECT& select,
         const MatrixT& t, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m, Workspace work ) {
     return trevc_impl< typename bindings::value_type<
@@ -457,11 +460,11 @@
 // * MatrixVR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR >
 inline typename boost::disable_if< detail::is_workspace< MatrixVR >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, VectorSELECT& select,
+trevc( const Side side, const char howmny, VectorSELECT& select,
         const MatrixT& t, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m ) {
     return trevc_impl< typename bindings::value_type<
@@ -477,11 +480,11 @@
 // * MatrixVR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, const VectorSELECT& select,
+trevc( const Side side, const char howmny, const VectorSELECT& select,
         const MatrixT& t, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m, Workspace work ) {
     return trevc_impl< typename bindings::value_type<
@@ -497,11 +500,11 @@
 // * MatrixVR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR >
 inline typename boost::disable_if< detail::is_workspace< MatrixVR >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, const VectorSELECT& select,
+trevc( const Side side, const char howmny, const VectorSELECT& select,
         const MatrixT& t, MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m ) {
     return trevc_impl< typename bindings::value_type<
@@ -517,11 +520,11 @@
 // * MatrixVR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, VectorSELECT& select,
+trevc( const Side side, const char howmny, VectorSELECT& select,
         MatrixT& t, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m, Workspace work ) {
     return trevc_impl< typename bindings::value_type<
@@ -537,11 +540,11 @@
 // * MatrixVR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR >
 inline typename boost::disable_if< detail::is_workspace< MatrixVR >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, VectorSELECT& select,
+trevc( const Side side, const char howmny, VectorSELECT& select,
         MatrixT& t, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m ) {
     return trevc_impl< typename bindings::value_type<
@@ -557,11 +560,11 @@
 // * MatrixVR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, const VectorSELECT& select,
+trevc( const Side side, const char howmny, const VectorSELECT& select,
         MatrixT& t, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m, Workspace work ) {
     return trevc_impl< typename bindings::value_type<
@@ -577,11 +580,11 @@
 // * MatrixVR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR >
 inline typename boost::disable_if< detail::is_workspace< MatrixVR >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, const VectorSELECT& select,
+trevc( const Side side, const char howmny, const VectorSELECT& select,
         MatrixT& t, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m ) {
     return trevc_impl< typename bindings::value_type<
@@ -597,11 +600,11 @@
 // * MatrixVR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, VectorSELECT& select,
+trevc( const Side side, const char howmny, VectorSELECT& select,
         const MatrixT& t, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m, Workspace work ) {
     return trevc_impl< typename bindings::value_type<
@@ -617,11 +620,11 @@
 // * MatrixVR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR >
 inline typename boost::disable_if< detail::is_workspace< MatrixVR >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, VectorSELECT& select,
+trevc( const Side side, const char howmny, VectorSELECT& select,
         const MatrixT& t, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m ) {
     return trevc_impl< typename bindings::value_type<
@@ -637,11 +640,11 @@
 // * MatrixVR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, const VectorSELECT& select,
+trevc( const Side side, const char howmny, const VectorSELECT& select,
         const MatrixT& t, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m, Workspace work ) {
     return trevc_impl< typename bindings::value_type<
@@ -657,11 +660,11 @@
 // * MatrixVR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR >
 inline typename boost::disable_if< detail::is_workspace< MatrixVR >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, const VectorSELECT& select,
+trevc( const Side side, const char howmny, const VectorSELECT& select,
         const MatrixT& t, const MatrixVL& vl, MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m ) {
     return trevc_impl< typename bindings::value_type<
@@ -677,11 +680,11 @@
 // * const MatrixVR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, VectorSELECT& select,
+trevc( const Side side, const char howmny, VectorSELECT& select,
         MatrixT& t, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m, Workspace work ) {
     return trevc_impl< typename bindings::value_type<
@@ -697,11 +700,11 @@
 // * const MatrixVR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR >
 inline typename boost::disable_if< detail::is_workspace< MatrixVR >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, VectorSELECT& select,
+trevc( const Side side, const char howmny, VectorSELECT& select,
         MatrixT& t, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m ) {
     return trevc_impl< typename bindings::value_type<
@@ -717,11 +720,11 @@
 // * const MatrixVR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, const VectorSELECT& select,
+trevc( const Side side, const char howmny, const VectorSELECT& select,
         MatrixT& t, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m, Workspace work ) {
     return trevc_impl< typename bindings::value_type<
@@ -737,11 +740,11 @@
 // * const MatrixVR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR >
 inline typename boost::disable_if< detail::is_workspace< MatrixVR >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, const VectorSELECT& select,
+trevc( const Side side, const char howmny, const VectorSELECT& select,
         MatrixT& t, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m ) {
     return trevc_impl< typename bindings::value_type<
@@ -757,11 +760,11 @@
 // * const MatrixVR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, VectorSELECT& select,
+trevc( const Side side, const char howmny, VectorSELECT& select,
         const MatrixT& t, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m, Workspace work ) {
     return trevc_impl< typename bindings::value_type<
@@ -777,11 +780,11 @@
 // * const MatrixVR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR >
 inline typename boost::disable_if< detail::is_workspace< MatrixVR >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, VectorSELECT& select,
+trevc( const Side side, const char howmny, VectorSELECT& select,
         const MatrixT& t, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m ) {
     return trevc_impl< typename bindings::value_type<
@@ -797,11 +800,11 @@
 // * const MatrixVR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, const VectorSELECT& select,
+trevc( const Side side, const char howmny, const VectorSELECT& select,
         const MatrixT& t, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m, Workspace work ) {
     return trevc_impl< typename bindings::value_type<
@@ -817,11 +820,11 @@
 // * const MatrixVR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR >
 inline typename boost::disable_if< detail::is_workspace< MatrixVR >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, const VectorSELECT& select,
+trevc( const Side side, const char howmny, const VectorSELECT& select,
         const MatrixT& t, MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m ) {
     return trevc_impl< typename bindings::value_type<
@@ -837,11 +840,11 @@
 // * const MatrixVR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, VectorSELECT& select,
+trevc( const Side side, const char howmny, VectorSELECT& select,
         MatrixT& t, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m, Workspace work ) {
     return trevc_impl< typename bindings::value_type<
@@ -857,11 +860,11 @@
 // * const MatrixVR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR >
 inline typename boost::disable_if< detail::is_workspace< MatrixVR >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, VectorSELECT& select,
+trevc( const Side side, const char howmny, VectorSELECT& select,
         MatrixT& t, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m ) {
     return trevc_impl< typename bindings::value_type<
@@ -877,11 +880,11 @@
 // * const MatrixVR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, const VectorSELECT& select,
+trevc( const Side side, const char howmny, const VectorSELECT& select,
         MatrixT& t, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m, Workspace work ) {
     return trevc_impl< typename bindings::value_type<
@@ -897,11 +900,11 @@
 // * const MatrixVR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR >
 inline typename boost::disable_if< detail::is_workspace< MatrixVR >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, const VectorSELECT& select,
+trevc( const Side side, const char howmny, const VectorSELECT& select,
         MatrixT& t, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m ) {
     return trevc_impl< typename bindings::value_type<
@@ -917,11 +920,11 @@
 // * const MatrixVR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, VectorSELECT& select,
+trevc( const Side side, const char howmny, VectorSELECT& select,
         const MatrixT& t, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m, Workspace work ) {
     return trevc_impl< typename bindings::value_type<
@@ -937,11 +940,11 @@
 // * const MatrixVR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR >
 inline typename boost::disable_if< detail::is_workspace< MatrixVR >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, VectorSELECT& select,
+trevc( const Side side, const char howmny, VectorSELECT& select,
         const MatrixT& t, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m ) {
     return trevc_impl< typename bindings::value_type<
@@ -957,11 +960,11 @@
 // * const MatrixVR&
 // * User-defined workspace
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR, typename Workspace >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, const VectorSELECT& select,
+trevc( const Side side, const char howmny, const VectorSELECT& select,
         const MatrixT& t, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m, Workspace work ) {
     return trevc_impl< typename bindings::value_type<
@@ -977,11 +980,11 @@
 // * const MatrixVR&
 // * Default workspace-type (optimal)
 //
-template< typename VectorSELECT, typename MatrixT, typename MatrixVL,
-        typename MatrixVR >
+template< typename Side, typename VectorSELECT, typename MatrixT,
+        typename MatrixVL, typename MatrixVR >
 inline typename boost::disable_if< detail::is_workspace< MatrixVR >,
         std::ptrdiff_t >::type
-trevc( const char side, const char howmny, const VectorSELECT& select,
+trevc( const Side side, const char howmny, const VectorSELECT& select,
         const MatrixT& t, const MatrixVL& vl, const MatrixVR& vr,
         const fortran_int_t mm, fortran_int_t& m ) {
     return trevc_impl< typename bindings::value_type<
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trrfs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trrfs.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trrfs.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -56,11 +56,11 @@
 // * float value-type.
 //
 template< typename UpLo, typename Trans, typename Diag >
-inline std::ptrdiff_t trrfs( UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t nrhs, const float* a, const fortran_int_t lda,
-        const float* b, const fortran_int_t ldb, const float* x,
-        const fortran_int_t ldx, float* ferr, float* berr, float* work,
-        fortran_int_t* iwork ) {
+inline std::ptrdiff_t trrfs( const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t nrhs,
+        const float* a, const fortran_int_t lda, const float* b,
+        const fortran_int_t ldb, const float* x, const fortran_int_t ldx,
+        float* ferr, float* berr, float* work, fortran_int_t* iwork ) {
     fortran_int_t info(0);
     LAPACK_STRRFS( &lapack_option< UpLo >::value, &lapack_option<
             Trans >::value, &lapack_option< Diag >::value, &n, &nrhs, a, &lda,
@@ -74,11 +74,11 @@
 // * double value-type.
 //
 template< typename UpLo, typename Trans, typename Diag >
-inline std::ptrdiff_t trrfs( UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t nrhs, const double* a, const fortran_int_t lda,
-        const double* b, const fortran_int_t ldb, const double* x,
-        const fortran_int_t ldx, double* ferr, double* berr, double* work,
-        fortran_int_t* iwork ) {
+inline std::ptrdiff_t trrfs( const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t nrhs,
+        const double* a, const fortran_int_t lda, const double* b,
+        const fortran_int_t ldb, const double* x, const fortran_int_t ldx,
+        double* ferr, double* berr, double* work, fortran_int_t* iwork ) {
     fortran_int_t info(0);
     LAPACK_DTRRFS( &lapack_option< UpLo >::value, &lapack_option<
             Trans >::value, &lapack_option< Diag >::value, &n, &nrhs, a, &lda,
@@ -92,12 +92,12 @@
 // * complex<float> value-type.
 //
 template< typename UpLo, typename Trans, typename Diag >
-inline std::ptrdiff_t trrfs( UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t nrhs, const std::complex<float>* a,
-        const fortran_int_t lda, const std::complex<float>* b,
-        const fortran_int_t ldb, const std::complex<float>* x,
-        const fortran_int_t ldx, float* ferr, float* berr,
-        std::complex<float>* work, float* rwork ) {
+inline std::ptrdiff_t trrfs( const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t nrhs,
+        const std::complex<float>* a, const fortran_int_t lda,
+        const std::complex<float>* b, const fortran_int_t ldb,
+        const std::complex<float>* x, const fortran_int_t ldx, float* ferr,
+        float* berr, std::complex<float>* work, float* rwork ) {
     fortran_int_t info(0);
     LAPACK_CTRRFS( &lapack_option< UpLo >::value, &lapack_option<
             Trans >::value, &lapack_option< Diag >::value, &n, &nrhs, a, &lda,
@@ -111,12 +111,12 @@
 // * complex<double> value-type.
 //
 template< typename UpLo, typename Trans, typename Diag >
-inline std::ptrdiff_t trrfs( UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t nrhs, const std::complex<double>* a,
-        const fortran_int_t lda, const std::complex<double>* b,
-        const fortran_int_t ldb, const std::complex<double>* x,
-        const fortran_int_t ldx, double* ferr, double* berr,
-        std::complex<double>* work, double* rwork ) {
+inline std::ptrdiff_t trrfs( const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t nrhs,
+        const std::complex<double>* a, const fortran_int_t lda,
+        const std::complex<double>* b, const fortran_int_t ldb,
+        const std::complex<double>* x, const fortran_int_t ldx, double* ferr,
+        double* berr, std::complex<double>* work, double* rwork ) {
     fortran_int_t info(0);
     LAPACK_ZTRRFS( &lapack_option< UpLo >::value, &lapack_option<
             Trans >::value, &lapack_option< Diag >::value, &n, &nrhs, a, &lda,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trsen.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trsen.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trsen.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -186,8 +186,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trsna.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trsna.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trsna.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -240,16 +240,18 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 
     //
     // Static member function that returns the minimum size of
     // workspace-array iwork.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_iwork( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
@@ -362,16 +364,18 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 
     //
     // Static member function that returns the minimum size of
     // workspace-array rwork.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_rwork( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trtri.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trtri.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trtri.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -59,8 +59,8 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo, typename Diag >
-inline std::ptrdiff_t trtri( Order, UpLo, Diag, const int n, float* a,
-        const int lda ) {
+inline std::ptrdiff_t trtri( Order, const UpLo uplo, const Diag diag,
+        const int n, float* a, const int lda ) {
     return clapack_strtri( clapack_option< Order >::value, clapack_option<
             UpLo >::value, clapack_option< Diag >::value, n, a, lda );
 }
@@ -71,8 +71,8 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo, typename Diag >
-inline std::ptrdiff_t trtri( Order, UpLo, Diag, const int n, double* a,
-        const int lda ) {
+inline std::ptrdiff_t trtri( Order, const UpLo uplo, const Diag diag,
+        const int n, double* a, const int lda ) {
     return clapack_dtrtri( clapack_option< Order >::value, clapack_option<
             UpLo >::value, clapack_option< Diag >::value, n, a, lda );
 }
@@ -83,8 +83,8 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Diag >
-inline std::ptrdiff_t trtri( Order, UpLo, Diag, const int n,
-        std::complex<float>* a, const int lda ) {
+inline std::ptrdiff_t trtri( Order, const UpLo uplo, const Diag diag,
+        const int n, std::complex<float>* a, const int lda ) {
     return clapack_ctrtri( clapack_option< Order >::value, clapack_option<
             UpLo >::value, clapack_option< Diag >::value, n, a, lda );
 }
@@ -95,8 +95,8 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Diag >
-inline std::ptrdiff_t trtri( Order, UpLo, Diag, const int n,
-        std::complex<double>* a, const int lda ) {
+inline std::ptrdiff_t trtri( Order, const UpLo uplo, const Diag diag,
+        const int n, std::complex<double>* a, const int lda ) {
     return clapack_ztrtri( clapack_option< Order >::value, clapack_option<
             UpLo >::value, clapack_option< Diag >::value, n, a, lda );
 }
@@ -108,8 +108,8 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo, typename Diag >
-inline std::ptrdiff_t trtri( Order, UpLo, Diag, const fortran_int_t n,
-        float* a, const fortran_int_t lda ) {
+inline std::ptrdiff_t trtri( Order, const UpLo uplo, const Diag diag,
+        const fortran_int_t n, float* a, const fortran_int_t lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     fortran_int_t info(0);
     LAPACK_STRTRI( &lapack_option< UpLo >::value, &lapack_option<
@@ -123,8 +123,8 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo, typename Diag >
-inline std::ptrdiff_t trtri( Order, UpLo, Diag, const fortran_int_t n,
-        double* a, const fortran_int_t lda ) {
+inline std::ptrdiff_t trtri( Order, const UpLo uplo, const Diag diag,
+        const fortran_int_t n, double* a, const fortran_int_t lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     fortran_int_t info(0);
     LAPACK_DTRTRI( &lapack_option< UpLo >::value, &lapack_option<
@@ -138,8 +138,9 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo, typename Diag >
-inline std::ptrdiff_t trtri( Order, UpLo, Diag, const fortran_int_t n,
-        std::complex<float>* a, const fortran_int_t lda ) {
+inline std::ptrdiff_t trtri( Order, const UpLo uplo, const Diag diag,
+        const fortran_int_t n, std::complex<float>* a,
+        const fortran_int_t lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     fortran_int_t info(0);
     LAPACK_CTRTRI( &lapack_option< UpLo >::value, &lapack_option<
@@ -153,8 +154,9 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo, typename Diag >
-inline std::ptrdiff_t trtri( Order, UpLo, Diag, const fortran_int_t n,
-        std::complex<double>* a, const fortran_int_t lda ) {
+inline std::ptrdiff_t trtri( Order, const UpLo uplo, const Diag diag,
+        const fortran_int_t n, std::complex<double>* a,
+        const fortran_int_t lda ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
     fortran_int_t info(0);
     LAPACK_ZTRTRI( &lapack_option< UpLo >::value, &lapack_option<
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trtrs.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trtrs.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/trtrs.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -51,9 +51,10 @@
 // * float value-type.
 //
 template< typename UpLo, typename Trans, typename Diag >
-inline std::ptrdiff_t trtrs( UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t nrhs, const float* a, const fortran_int_t lda,
-        float* b, const fortran_int_t ldb ) {
+inline std::ptrdiff_t trtrs( const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t nrhs,
+        const float* a, const fortran_int_t lda, float* b,
+        const fortran_int_t ldb ) {
     fortran_int_t info(0);
     LAPACK_STRTRS( &lapack_option< UpLo >::value, &lapack_option<
             Trans >::value, &lapack_option< Diag >::value, &n, &nrhs, a, &lda,
@@ -67,9 +68,10 @@
 // * double value-type.
 //
 template< typename UpLo, typename Trans, typename Diag >
-inline std::ptrdiff_t trtrs( UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t nrhs, const double* a, const fortran_int_t lda,
-        double* b, const fortran_int_t ldb ) {
+inline std::ptrdiff_t trtrs( const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t nrhs,
+        const double* a, const fortran_int_t lda, double* b,
+        const fortran_int_t ldb ) {
     fortran_int_t info(0);
     LAPACK_DTRTRS( &lapack_option< UpLo >::value, &lapack_option<
             Trans >::value, &lapack_option< Diag >::value, &n, &nrhs, a, &lda,
@@ -83,10 +85,10 @@
 // * complex<float> value-type.
 //
 template< typename UpLo, typename Trans, typename Diag >
-inline std::ptrdiff_t trtrs( UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t nrhs, const std::complex<float>* a,
-        const fortran_int_t lda, std::complex<float>* b,
-        const fortran_int_t ldb ) {
+inline std::ptrdiff_t trtrs( const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t nrhs,
+        const std::complex<float>* a, const fortran_int_t lda,
+        std::complex<float>* b, const fortran_int_t ldb ) {
     fortran_int_t info(0);
     LAPACK_CTRTRS( &lapack_option< UpLo >::value, &lapack_option<
             Trans >::value, &lapack_option< Diag >::value, &n, &nrhs, a, &lda,
@@ -100,10 +102,10 @@
 // * complex<double> value-type.
 //
 template< typename UpLo, typename Trans, typename Diag >
-inline std::ptrdiff_t trtrs( UpLo, Trans, Diag, const fortran_int_t n,
-        const fortran_int_t nrhs, const std::complex<double>* a,
-        const fortran_int_t lda, std::complex<double>* b,
-        const fortran_int_t ldb ) {
+inline std::ptrdiff_t trtrs( const UpLo uplo, const Trans trans,
+        const Diag diag, const fortran_int_t n, const fortran_int_t nrhs,
+        const std::complex<double>* a, const fortran_int_t lda,
+        std::complex<double>* b, const fortran_int_t ldb ) {
     fortran_int_t info(0);
     LAPACK_ZTRTRS( &lapack_option< UpLo >::value, &lapack_option<
             Trans >::value, &lapack_option< Diag >::value, &n, &nrhs, a, &lda,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tzrzf.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tzrzf.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/tzrzf.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -192,8 +192,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
@@ -278,8 +279,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unghr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unghr.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unghr.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -158,8 +158,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ungtr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ungtr.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/ungtr.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -17,6 +17,7 @@
 #include <boost/assert.hpp>
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/detail/array.hpp>
+#include <boost/numeric/bindings/detail/if_left.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/lapack/workspace.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
@@ -52,7 +53,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t ungtr( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t ungtr( const UpLo uplo, const fortran_int_t n,
         std::complex<float>* a, const fortran_int_t lda,
         const std::complex<float>* tau, std::complex<float>* work,
         const fortran_int_t lwork ) {
@@ -68,7 +69,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t ungtr( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t ungtr( const UpLo uplo, const fortran_int_t n,
         std::complex<double>* a, const fortran_int_t lda,
         const std::complex<double>* tau, std::complex<double>* work,
         const fortran_int_t lwork ) {
@@ -161,12 +162,11 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
-    static std::ptrdiff_t min_size_work( const std::ptrdiff_t side,
+    template< typename Side >
+    static std::ptrdiff_t min_size_work( const Side side,
             const std::ptrdiff_t m, const std::ptrdiff_t n ) {
-        if ( side == 'L' )
-            return std::max< std::ptrdiff_t >( 1, n );
-        else
-            return std::max< std::ptrdiff_t >( 1, m );
+        return std::max< std::ptrdiff_t >( 1, bindings::detail::if_left( side,
+                n, m ) );
     }
 };
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmbr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmbr.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmbr.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -17,6 +17,7 @@
 #include <boost/assert.hpp>
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/detail/array.hpp>
+#include <boost/numeric/bindings/detail/if_left.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/lapack/workspace.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
@@ -51,16 +52,17 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<float> value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t unmbr( const char vect, const char side, Trans,
-        const fortran_int_t m, const fortran_int_t n, const fortran_int_t k,
-        const std::complex<float>* a, const fortran_int_t lda,
-        const std::complex<float>* tau, std::complex<float>* c,
-        const fortran_int_t ldc, std::complex<float>* work,
-        const fortran_int_t lwork ) {
+template< typename Side, typename Trans >
+inline std::ptrdiff_t unmbr( const char vect, const Side side,
+        const Trans trans, const fortran_int_t m, const fortran_int_t n,
+        const fortran_int_t k, const std::complex<float>* a,
+        const fortran_int_t lda, const std::complex<float>* tau,
+        std::complex<float>* c, const fortran_int_t ldc,
+        std::complex<float>* work, const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_CUNMBR( &vect, &side, &lapack_option< Trans >::value, &m, &n, &k,
-            a, &lda, tau, c, &ldc, work, &lwork, &info );
+    LAPACK_CUNMBR( &vect, &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork,
+            &info );
     return info;
 }
 
@@ -69,16 +71,17 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<double> value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t unmbr( const char vect, const char side, Trans,
-        const fortran_int_t m, const fortran_int_t n, const fortran_int_t k,
-        const std::complex<double>* a, const fortran_int_t lda,
-        const std::complex<double>* tau, std::complex<double>* c,
-        const fortran_int_t ldc, std::complex<double>* work,
-        const fortran_int_t lwork ) {
+template< typename Side, typename Trans >
+inline std::ptrdiff_t unmbr( const char vect, const Side side,
+        const Trans trans, const fortran_int_t m, const fortran_int_t n,
+        const fortran_int_t k, const std::complex<double>* a,
+        const fortran_int_t lda, const std::complex<double>* tau,
+        std::complex<double>* c, const fortran_int_t ldc,
+        std::complex<double>* work, const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_ZUNMBR( &vect, &side, &lapack_option< Trans >::value, &m, &n, &k,
-            a, &lda, tau, c, &ldc, work, &lwork, &info );
+    LAPACK_ZUNMBR( &vect, &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork,
+            &info );
     return info;
 }
 
@@ -100,9 +103,9 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC,
-            typename WORK >
-    static std::ptrdiff_t invoke( const char vect, const char side,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC, typename WORK >
+    static std::ptrdiff_t invoke( const char vect, const Side side,
             const fortran_int_t k, const MatrixA& a, const VectorTAU& tau,
             MatrixC& c, detail::workspace1< WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -130,7 +133,6 @@
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
         BOOST_ASSERT( k >= 0 );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         BOOST_ASSERT( vect == 'Q' || vect == 'P' );
         return detail::unmbr( vect, side, trans(), bindings::size_row(c),
                 bindings::size_column(c), k, bindings::begin_value(a),
@@ -147,8 +149,9 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char vect, const char side,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const char vect, const Side side,
             const fortran_int_t k, const MatrixA& a, const VectorTAU& tau,
             MatrixC& c, minimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -165,8 +168,9 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char vect, const char side,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const char vect, const Side side,
             const fortran_int_t k, const MatrixA& a, const VectorTAU& tau,
             MatrixC& c, optimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -186,12 +190,11 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
-    static std::ptrdiff_t min_size_work( const char side,
+    template< typename Side >
+    static std::ptrdiff_t min_size_work( const Side side,
             const std::ptrdiff_t m, const std::ptrdiff_t n ) {
-        if ( side == 'L' )
-            return std::max< std::ptrdiff_t >( 1, n );
-        else
-            return std::max< std::ptrdiff_t >( 1, m );
+        return std::max< std::ptrdiff_t >( 1, bindings::detail::if_left( side,
+                n, m ) );
     }
 };
 
@@ -210,11 +213,11 @@
 // * MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-unmbr( const char vect, const char side, const fortran_int_t k,
+unmbr( const char vect, const Side side, const fortran_int_t k,
         const MatrixA& a, const VectorTAU& tau, MatrixC& c, Workspace work ) {
     return unmbr_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( vect, side, k, a, tau, c, work );
@@ -225,10 +228,11 @@
 // * MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-unmbr( const char vect, const char side, const fortran_int_t k,
+unmbr( const char vect, const Side side, const fortran_int_t k,
         const MatrixA& a, const VectorTAU& tau, MatrixC& c ) {
     return unmbr_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( vect, side, k, a, tau, c,
@@ -240,11 +244,11 @@
 // * const MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-unmbr( const char vect, const char side, const fortran_int_t k,
+unmbr( const char vect, const Side side, const fortran_int_t k,
         const MatrixA& a, const VectorTAU& tau, const MatrixC& c,
         Workspace work ) {
     return unmbr_impl< typename bindings::value_type<
@@ -256,10 +260,11 @@
 // * const MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-unmbr( const char vect, const char side, const fortran_int_t k,
+unmbr( const char vect, const Side side, const fortran_int_t k,
         const MatrixA& a, const VectorTAU& tau, const MatrixC& c ) {
     return unmbr_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( vect, side, k, a, tau, c,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmhr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmhr.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmhr.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -17,6 +17,7 @@
 #include <boost/assert.hpp>
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/detail/array.hpp>
+#include <boost/numeric/bindings/detail/if_left.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/lapack/workspace.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
@@ -51,16 +52,17 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<float> value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t unmhr( const char side, Trans, const fortran_int_t m,
-        const fortran_int_t n, const fortran_int_t ilo,
+template< typename Side, typename Trans >
+inline std::ptrdiff_t unmhr( const Side side, const Trans trans,
+        const fortran_int_t m, const fortran_int_t n, const fortran_int_t ilo,
         const fortran_int_t ihi, const std::complex<float>* a,
         const fortran_int_t lda, const std::complex<float>* tau,
         std::complex<float>* c, const fortran_int_t ldc,
         std::complex<float>* work, const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_CUNMHR( &side, &lapack_option< Trans >::value, &m, &n, &ilo, &ihi,
-            a, &lda, tau, c, &ldc, work, &lwork, &info );
+    LAPACK_CUNMHR( &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &m, &n, &ilo, &ihi, a, &lda, tau, c, &ldc, work,
+            &lwork, &info );
     return info;
 }
 
@@ -69,16 +71,17 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<double> value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t unmhr( const char side, Trans, const fortran_int_t m,
-        const fortran_int_t n, const fortran_int_t ilo,
+template< typename Side, typename Trans >
+inline std::ptrdiff_t unmhr( const Side side, const Trans trans,
+        const fortran_int_t m, const fortran_int_t n, const fortran_int_t ilo,
         const fortran_int_t ihi, const std::complex<double>* a,
         const fortran_int_t lda, const std::complex<double>* tau,
         std::complex<double>* c, const fortran_int_t ldc,
         std::complex<double>* work, const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_ZUNMHR( &side, &lapack_option< Trans >::value, &m, &n, &ilo, &ihi,
-            a, &lda, tau, c, &ldc, work, &lwork, &info );
+    LAPACK_ZUNMHR( &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &m, &n, &ilo, &ihi, a, &lda, tau, c, &ldc, work,
+            &lwork, &info );
     return info;
 }
 
@@ -100,9 +103,9 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC,
-            typename WORK >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t ilo,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC, typename WORK >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t ilo,
             const fortran_int_t ihi, const MatrixA& a,
             const VectorTAU& tau, MatrixC& c, detail::workspace1<
             WORK > work ) {
@@ -128,7 +131,6 @@
         BOOST_ASSERT( bindings::size_row(c) >= 0 );
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         return detail::unmhr( side, trans(), bindings::size_row(c),
                 bindings::size_column(c), ilo, ihi, bindings::begin_value(a),
                 bindings::stride_major(a), bindings::begin_value(tau),
@@ -144,8 +146,9 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t ilo,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t ilo,
             const fortran_int_t ihi, const MatrixA& a,
             const VectorTAU& tau, MatrixC& c, minimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -162,8 +165,9 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t ilo,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t ilo,
             const fortran_int_t ihi, const MatrixA& a,
             const VectorTAU& tau, MatrixC& c, optimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -183,12 +187,11 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
-    static std::ptrdiff_t min_size_work( const char side,
+    template< typename Side >
+    static std::ptrdiff_t min_size_work( const Side side,
             const std::ptrdiff_t m, const std::ptrdiff_t n ) {
-        if ( side == 'L' )
-            return std::max< std::ptrdiff_t >( 1, n );
-        else
-            return std::max< std::ptrdiff_t >( 1, m );
+        return std::max< std::ptrdiff_t >( 1, bindings::detail::if_left( side,
+                n, m ) );
     }
 };
 
@@ -207,11 +210,11 @@
 // * MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-unmhr( const char side, const fortran_int_t ilo,
+unmhr( const Side side, const fortran_int_t ilo,
         const fortran_int_t ihi, const MatrixA& a, const VectorTAU& tau,
         MatrixC& c, Workspace work ) {
     return unmhr_impl< typename bindings::value_type<
@@ -223,10 +226,11 @@
 // * MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-unmhr( const char side, const fortran_int_t ilo,
+unmhr( const Side side, const fortran_int_t ilo,
         const fortran_int_t ihi, const MatrixA& a, const VectorTAU& tau,
         MatrixC& c ) {
     return unmhr_impl< typename bindings::value_type<
@@ -239,11 +243,11 @@
 // * const MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-unmhr( const char side, const fortran_int_t ilo,
+unmhr( const Side side, const fortran_int_t ilo,
         const fortran_int_t ihi, const MatrixA& a, const VectorTAU& tau,
         const MatrixC& c, Workspace work ) {
     return unmhr_impl< typename bindings::value_type<
@@ -255,10 +259,11 @@
 // * const MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-unmhr( const char side, const fortran_int_t ilo,
+unmhr( const Side side, const fortran_int_t ilo,
         const fortran_int_t ihi, const MatrixA& a, const VectorTAU& tau,
         const MatrixC& c ) {
     return unmhr_impl< typename bindings::value_type<
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmlq.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmlq.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmlq.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -17,6 +17,7 @@
 #include <boost/assert.hpp>
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/detail/array.hpp>
+#include <boost/numeric/bindings/detail/if_left.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/lapack/workspace.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
@@ -51,16 +52,17 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<float> value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t unmlq( const char side, Trans, const fortran_int_t m,
-        const fortran_int_t n, const fortran_int_t k,
+template< typename Side, typename Trans >
+inline std::ptrdiff_t unmlq( const Side side, const Trans trans,
+        const fortran_int_t m, const fortran_int_t n, const fortran_int_t k,
         const std::complex<float>* a, const fortran_int_t lda,
         const std::complex<float>* tau, std::complex<float>* c,
         const fortran_int_t ldc, std::complex<float>* work,
         const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_CUNMLQ( &side, &lapack_option< Trans >::value, &m, &n, &k, a, &lda,
-            tau, c, &ldc, work, &lwork, &info );
+    LAPACK_CUNMLQ( &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork,
+            &info );
     return info;
 }
 
@@ -69,16 +71,17 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<double> value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t unmlq( const char side, Trans, const fortran_int_t m,
-        const fortran_int_t n, const fortran_int_t k,
+template< typename Side, typename Trans >
+inline std::ptrdiff_t unmlq( const Side side, const Trans trans,
+        const fortran_int_t m, const fortran_int_t n, const fortran_int_t k,
         const std::complex<double>* a, const fortran_int_t lda,
         const std::complex<double>* tau, std::complex<double>* c,
         const fortran_int_t ldc, std::complex<double>* work,
         const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_ZUNMLQ( &side, &lapack_option< Trans >::value, &m, &n, &k, a, &lda,
-            tau, c, &ldc, work, &lwork, &info );
+    LAPACK_ZUNMLQ( &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork,
+            &info );
     return info;
 }
 
@@ -100,9 +103,9 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC,
-            typename WORK >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t k,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC, typename WORK >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
             const MatrixA& a, const VectorTAU& tau, MatrixC& c,
             detail::workspace1< WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -130,7 +133,6 @@
                 k) );
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         return detail::unmlq( side, trans(), bindings::size_row(c),
                 bindings::size_column(c), k, bindings::begin_value(a),
                 bindings::stride_major(a), bindings::begin_value(tau),
@@ -146,8 +148,9 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t k,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
             const MatrixA& a, const VectorTAU& tau, MatrixC& c,
             minimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -164,8 +167,9 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t k,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
             const MatrixA& a, const VectorTAU& tau, MatrixC& c,
             optimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -185,12 +189,11 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
-    static std::ptrdiff_t min_size_work( const char side,
+    template< typename Side >
+    static std::ptrdiff_t min_size_work( const Side side,
             const std::ptrdiff_t m, const std::ptrdiff_t n ) {
-        if ( side == 'L' )
-            return std::max< std::ptrdiff_t >( 1, n );
-        else
-            return std::max< std::ptrdiff_t >( 1, m );
+        return std::max< std::ptrdiff_t >( 1, bindings::detail::if_left( side,
+                n, m ) );
     }
 };
 
@@ -209,11 +212,11 @@
 // * MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-unmlq( const char side, const fortran_int_t k, const MatrixA& a,
+unmlq( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, MatrixC& c, Workspace work ) {
     return unmlq_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c, work );
@@ -224,10 +227,11 @@
 // * MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-unmlq( const char side, const fortran_int_t k, const MatrixA& a,
+unmlq( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, MatrixC& c ) {
     return unmlq_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c,
@@ -239,11 +243,11 @@
 // * const MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-unmlq( const char side, const fortran_int_t k, const MatrixA& a,
+unmlq( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, const MatrixC& c, Workspace work ) {
     return unmlq_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c, work );
@@ -254,10 +258,11 @@
 // * const MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-unmlq( const char side, const fortran_int_t k, const MatrixA& a,
+unmlq( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, const MatrixC& c ) {
     return unmlq_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmql.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmql.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmql.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -17,6 +17,7 @@
 #include <boost/assert.hpp>
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/detail/array.hpp>
+#include <boost/numeric/bindings/detail/if_left.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/lapack/workspace.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
@@ -51,16 +52,17 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<float> value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t unmql( const char side, Trans, const fortran_int_t m,
-        const fortran_int_t n, const fortran_int_t k,
+template< typename Side, typename Trans >
+inline std::ptrdiff_t unmql( const Side side, const Trans trans,
+        const fortran_int_t m, const fortran_int_t n, const fortran_int_t k,
         const std::complex<float>* a, const fortran_int_t lda,
         const std::complex<float>* tau, std::complex<float>* c,
         const fortran_int_t ldc, std::complex<float>* work,
         const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_CUNMQL( &side, &lapack_option< Trans >::value, &m, &n, &k, a, &lda,
-            tau, c, &ldc, work, &lwork, &info );
+    LAPACK_CUNMQL( &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork,
+            &info );
     return info;
 }
 
@@ -69,16 +71,17 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<double> value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t unmql( const char side, Trans, const fortran_int_t m,
-        const fortran_int_t n, const fortran_int_t k,
+template< typename Side, typename Trans >
+inline std::ptrdiff_t unmql( const Side side, const Trans trans,
+        const fortran_int_t m, const fortran_int_t n, const fortran_int_t k,
         const std::complex<double>* a, const fortran_int_t lda,
         const std::complex<double>* tau, std::complex<double>* c,
         const fortran_int_t ldc, std::complex<double>* work,
         const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_ZUNMQL( &side, &lapack_option< Trans >::value, &m, &n, &k, a, &lda,
-            tau, c, &ldc, work, &lwork, &info );
+    LAPACK_ZUNMQL( &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork,
+            &info );
     return info;
 }
 
@@ -100,9 +103,9 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC,
-            typename WORK >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t k,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC, typename WORK >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
             const MatrixA& a, const VectorTAU& tau, MatrixC& c,
             detail::workspace1< WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -128,7 +131,6 @@
         BOOST_ASSERT( bindings::size_row(c) >= 0 );
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         return detail::unmql( side, trans(), bindings::size_row(c),
                 bindings::size_column(c), k, bindings::begin_value(a),
                 bindings::stride_major(a), bindings::begin_value(tau),
@@ -144,8 +146,9 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t k,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
             const MatrixA& a, const VectorTAU& tau, MatrixC& c,
             minimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -162,8 +165,9 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t k,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
             const MatrixA& a, const VectorTAU& tau, MatrixC& c,
             optimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -183,12 +187,11 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
-    static std::ptrdiff_t min_size_work( const char side,
+    template< typename Side >
+    static std::ptrdiff_t min_size_work( const Side side,
             const std::ptrdiff_t m, const std::ptrdiff_t n ) {
-        if ( side == 'L' )
-            return std::max< std::ptrdiff_t >( 1, n );
-        else
-            return std::max< std::ptrdiff_t >( 1, m );
+        return std::max< std::ptrdiff_t >( 1, bindings::detail::if_left( side,
+                n, m ) );
     }
 };
 
@@ -207,11 +210,11 @@
 // * MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-unmql( const char side, const fortran_int_t k, const MatrixA& a,
+unmql( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, MatrixC& c, Workspace work ) {
     return unmql_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c, work );
@@ -222,10 +225,11 @@
 // * MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-unmql( const char side, const fortran_int_t k, const MatrixA& a,
+unmql( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, MatrixC& c ) {
     return unmql_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c,
@@ -237,11 +241,11 @@
 // * const MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-unmql( const char side, const fortran_int_t k, const MatrixA& a,
+unmql( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, const MatrixC& c, Workspace work ) {
     return unmql_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c, work );
@@ -252,10 +256,11 @@
 // * const MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-unmql( const char side, const fortran_int_t k, const MatrixA& a,
+unmql( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, const MatrixC& c ) {
     return unmql_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmqr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmqr.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmqr.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -17,6 +17,7 @@
 #include <boost/assert.hpp>
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/detail/array.hpp>
+#include <boost/numeric/bindings/detail/if_left.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/lapack/workspace.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
@@ -51,16 +52,17 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<float> value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t unmqr( const char side, Trans, const fortran_int_t m,
-        const fortran_int_t n, const fortran_int_t k,
+template< typename Side, typename Trans >
+inline std::ptrdiff_t unmqr( const Side side, const Trans trans,
+        const fortran_int_t m, const fortran_int_t n, const fortran_int_t k,
         const std::complex<float>* a, const fortran_int_t lda,
         const std::complex<float>* tau, std::complex<float>* c,
         const fortran_int_t ldc, std::complex<float>* work,
         const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_CUNMQR( &side, &lapack_option< Trans >::value, &m, &n, &k, a, &lda,
-            tau, c, &ldc, work, &lwork, &info );
+    LAPACK_CUNMQR( &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork,
+            &info );
     return info;
 }
 
@@ -69,16 +71,17 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<double> value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t unmqr( const char side, Trans, const fortran_int_t m,
-        const fortran_int_t n, const fortran_int_t k,
+template< typename Side, typename Trans >
+inline std::ptrdiff_t unmqr( const Side side, const Trans trans,
+        const fortran_int_t m, const fortran_int_t n, const fortran_int_t k,
         const std::complex<double>* a, const fortran_int_t lda,
         const std::complex<double>* tau, std::complex<double>* c,
         const fortran_int_t ldc, std::complex<double>* work,
         const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_ZUNMQR( &side, &lapack_option< Trans >::value, &m, &n, &k, a, &lda,
-            tau, c, &ldc, work, &lwork, &info );
+    LAPACK_ZUNMQR( &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork,
+            &info );
     return info;
 }
 
@@ -100,9 +103,9 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC,
-            typename WORK >
-    static std::ptrdiff_t invoke( const char side, const MatrixA& a,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC, typename WORK >
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
             const VectorTAU& tau, MatrixC& c, detail::workspace1<
             WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -128,7 +131,6 @@
         BOOST_ASSERT( bindings::size_row(c) >= 0 );
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         return detail::unmqr( side, trans(), bindings::size_row(c),
                 bindings::size_column(c), bindings::size(tau),
                 bindings::begin_value(a), bindings::stride_major(a),
@@ -145,8 +147,9 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const MatrixA& a,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
             const VectorTAU& tau, MatrixC& c, minimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
@@ -162,8 +165,9 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const MatrixA& a,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
             const VectorTAU& tau, MatrixC& c, optimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
@@ -182,12 +186,11 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
-    static std::ptrdiff_t min_size_work( const char side,
+    template< typename Side >
+    static std::ptrdiff_t min_size_work( const Side side,
             const std::ptrdiff_t m, const std::ptrdiff_t n ) {
-        if ( side == 'L' )
-            return std::max< std::ptrdiff_t >( 1, n );
-        else
-            return std::max< std::ptrdiff_t >( 1, m );
+        return std::max< std::ptrdiff_t >( 1, bindings::detail::if_left( side,
+                n, m ) );
     }
 };
 
@@ -206,11 +209,11 @@
 // * MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-unmqr( const char side, const MatrixA& a, const VectorTAU& tau,
+unmqr( const Side side, const MatrixA& a, const VectorTAU& tau,
         MatrixC& c, Workspace work ) {
     return unmqr_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, a, tau, c, work );
@@ -221,10 +224,11 @@
 // * MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-unmqr( const char side, const MatrixA& a, const VectorTAU& tau,
+unmqr( const Side side, const MatrixA& a, const VectorTAU& tau,
         MatrixC& c ) {
     return unmqr_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, a, tau, c, optimal_workspace() );
@@ -235,11 +239,11 @@
 // * const MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-unmqr( const char side, const MatrixA& a, const VectorTAU& tau,
+unmqr( const Side side, const MatrixA& a, const VectorTAU& tau,
         const MatrixC& c, Workspace work ) {
     return unmqr_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, a, tau, c, work );
@@ -250,10 +254,11 @@
 // * const MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-unmqr( const char side, const MatrixA& a, const VectorTAU& tau,
+unmqr( const Side side, const MatrixA& a, const VectorTAU& tau,
         const MatrixC& c ) {
     return unmqr_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, a, tau, c, optimal_workspace() );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmrq.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmrq.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmrq.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -17,6 +17,7 @@
 #include <boost/assert.hpp>
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/detail/array.hpp>
+#include <boost/numeric/bindings/detail/if_left.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/lapack/workspace.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
@@ -51,16 +52,17 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<float> value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t unmrq( const char side, Trans, const fortran_int_t m,
-        const fortran_int_t n, const fortran_int_t k,
+template< typename Side, typename Trans >
+inline std::ptrdiff_t unmrq( const Side side, const Trans trans,
+        const fortran_int_t m, const fortran_int_t n, const fortran_int_t k,
         const std::complex<float>* a, const fortran_int_t lda,
         const std::complex<float>* tau, std::complex<float>* c,
         const fortran_int_t ldc, std::complex<float>* work,
         const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_CUNMRQ( &side, &lapack_option< Trans >::value, &m, &n, &k, a, &lda,
-            tau, c, &ldc, work, &lwork, &info );
+    LAPACK_CUNMRQ( &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork,
+            &info );
     return info;
 }
 
@@ -69,16 +71,17 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<double> value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t unmrq( const char side, Trans, const fortran_int_t m,
-        const fortran_int_t n, const fortran_int_t k,
+template< typename Side, typename Trans >
+inline std::ptrdiff_t unmrq( const Side side, const Trans trans,
+        const fortran_int_t m, const fortran_int_t n, const fortran_int_t k,
         const std::complex<double>* a, const fortran_int_t lda,
         const std::complex<double>* tau, std::complex<double>* c,
         const fortran_int_t ldc, std::complex<double>* work,
         const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_ZUNMRQ( &side, &lapack_option< Trans >::value, &m, &n, &k, a, &lda,
-            tau, c, &ldc, work, &lwork, &info );
+    LAPACK_ZUNMRQ( &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &m, &n, &k, a, &lda, tau, c, &ldc, work, &lwork,
+            &info );
     return info;
 }
 
@@ -100,9 +103,9 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC,
-            typename WORK >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t k,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC, typename WORK >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
             const MatrixA& a, const VectorTAU& tau, MatrixC& c,
             detail::workspace1< WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -130,7 +133,6 @@
                 k) );
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         return detail::unmrq( side, trans(), bindings::size_row(c),
                 bindings::size_column(c), k, bindings::begin_value(a),
                 bindings::stride_major(a), bindings::begin_value(tau),
@@ -146,8 +148,9 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t k,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
             const MatrixA& a, const VectorTAU& tau, MatrixC& c,
             minimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -164,8 +167,9 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t k,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
             const MatrixA& a, const VectorTAU& tau, MatrixC& c,
             optimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -185,12 +189,11 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
-    static std::ptrdiff_t min_size_work( const char side,
+    template< typename Side >
+    static std::ptrdiff_t min_size_work( const Side side,
             const std::ptrdiff_t m, const std::ptrdiff_t n ) {
-        if ( side == 'L' )
-            return std::max< std::ptrdiff_t >( 1, n );
-        else
-            return std::max< std::ptrdiff_t >( 1, m );
+        return std::max< std::ptrdiff_t >( 1, bindings::detail::if_left( side,
+                n, m ) );
     }
 };
 
@@ -209,11 +212,11 @@
 // * MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-unmrq( const char side, const fortran_int_t k, const MatrixA& a,
+unmrq( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, MatrixC& c, Workspace work ) {
     return unmrq_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c, work );
@@ -224,10 +227,11 @@
 // * MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-unmrq( const char side, const fortran_int_t k, const MatrixA& a,
+unmrq( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, MatrixC& c ) {
     return unmrq_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c,
@@ -239,11 +243,11 @@
 // * const MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-unmrq( const char side, const fortran_int_t k, const MatrixA& a,
+unmrq( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, const MatrixC& c, Workspace work ) {
     return unmrq_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c, work );
@@ -254,10 +258,11 @@
 // * const MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-unmrq( const char side, const fortran_int_t k, const MatrixA& a,
+unmrq( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, const MatrixC& c ) {
     return unmrq_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmrz.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmrz.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmrz.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -51,16 +51,17 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<float> value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t unmrz( const char side, Trans, const fortran_int_t m,
-        const fortran_int_t n, const fortran_int_t k, const fortran_int_t l,
-        const std::complex<float>* a, const fortran_int_t lda,
-        const std::complex<float>* tau, std::complex<float>* c,
-        const fortran_int_t ldc, std::complex<float>* work,
-        const fortran_int_t lwork ) {
+template< typename Side, typename Trans >
+inline std::ptrdiff_t unmrz( const Side side, const Trans trans,
+        const fortran_int_t m, const fortran_int_t n, const fortran_int_t k,
+        const fortran_int_t l, const std::complex<float>* a,
+        const fortran_int_t lda, const std::complex<float>* tau,
+        std::complex<float>* c, const fortran_int_t ldc,
+        std::complex<float>* work, const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_CUNMRZ( &side, &lapack_option< Trans >::value, &m, &n, &k, &l, a,
-            &lda, tau, c, &ldc, work, &lwork, &info );
+    LAPACK_CUNMRZ( &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &m, &n, &k, &l, a, &lda, tau, c, &ldc, work,
+            &lwork, &info );
     return info;
 }
 
@@ -69,16 +70,17 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<double> value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t unmrz( const char side, Trans, const fortran_int_t m,
-        const fortran_int_t n, const fortran_int_t k, const fortran_int_t l,
-        const std::complex<double>* a, const fortran_int_t lda,
-        const std::complex<double>* tau, std::complex<double>* c,
-        const fortran_int_t ldc, std::complex<double>* work,
-        const fortran_int_t lwork ) {
+template< typename Side, typename Trans >
+inline std::ptrdiff_t unmrz( const Side side, const Trans trans,
+        const fortran_int_t m, const fortran_int_t n, const fortran_int_t k,
+        const fortran_int_t l, const std::complex<double>* a,
+        const fortran_int_t lda, const std::complex<double>* tau,
+        std::complex<double>* c, const fortran_int_t ldc,
+        std::complex<double>* work, const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_ZUNMRZ( &side, &lapack_option< Trans >::value, &m, &n, &k, &l, a,
-            &lda, tau, c, &ldc, work, &lwork, &info );
+    LAPACK_ZUNMRZ( &lapack_option< Side >::value, &lapack_option<
+            Trans >::value, &m, &n, &k, &l, a, &lda, tau, c, &ldc, work,
+            &lwork, &info );
     return info;
 }
 
@@ -100,9 +102,9 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC,
-            typename WORK >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t k,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC, typename WORK >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
             const MatrixA& a, const VectorTAU& tau, MatrixC& c,
             detail::workspace1< WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -129,7 +131,6 @@
                 k) );
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         return detail::unmrz( side, trans(), bindings::size_row(c),
                 bindings::size_column(c), k, bindings::size_column_op(a,
                 trans()), bindings::begin_value(a), bindings::stride_major(a),
@@ -146,8 +147,9 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t k,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
             const MatrixA& a, const VectorTAU& tau, MatrixC& c,
             minimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -164,8 +166,9 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const fortran_int_t k,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const fortran_int_t k,
             const MatrixA& a, const VectorTAU& tau, MatrixC& c,
             optimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -185,8 +188,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
@@ -205,11 +209,11 @@
 // * MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-unmrz( const char side, const fortran_int_t k, const MatrixA& a,
+unmrz( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, MatrixC& c, Workspace work ) {
     return unmrz_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c, work );
@@ -220,10 +224,11 @@
 // * MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-unmrz( const char side, const fortran_int_t k, const MatrixA& a,
+unmrz( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, MatrixC& c ) {
     return unmrz_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c,
@@ -235,11 +240,11 @@
 // * const MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-unmrz( const char side, const fortran_int_t k, const MatrixA& a,
+unmrz( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, const MatrixC& c, Workspace work ) {
     return unmrz_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c, work );
@@ -250,10 +255,11 @@
 // * const MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-unmrz( const char side, const fortran_int_t k, const MatrixA& a,
+unmrz( const Side side, const fortran_int_t k, const MatrixA& a,
         const VectorTAU& tau, const MatrixC& c ) {
     return unmrz_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, k, a, tau, c,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmtr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmtr.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/unmtr.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -17,6 +17,7 @@
 #include <boost/assert.hpp>
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/detail/array.hpp>
+#include <boost/numeric/bindings/detail/if_left.hpp>
 #include <boost/numeric/bindings/is_mutable.hpp>
 #include <boost/numeric/bindings/lapack/workspace.hpp>
 #include <boost/numeric/bindings/remove_imaginary.hpp>
@@ -52,17 +53,17 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<float> value-type.
 //
-template< typename UpLo, typename Trans >
-inline std::ptrdiff_t unmtr( const char side, UpLo, Trans,
-        const fortran_int_t m, const fortran_int_t n,
+template< typename Side, typename UpLo, typename Trans >
+inline std::ptrdiff_t unmtr( const Side side, const UpLo uplo,
+        const Trans trans, const fortran_int_t m, const fortran_int_t n,
         const std::complex<float>* a, const fortran_int_t lda,
         const std::complex<float>* tau, std::complex<float>* c,
         const fortran_int_t ldc, std::complex<float>* work,
         const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_CUNMTR( &side, &lapack_option< UpLo >::value, &lapack_option<
-            Trans >::value, &m, &n, a, &lda, tau, c, &ldc, work, &lwork,
-            &info );
+    LAPACK_CUNMTR( &lapack_option< Side >::value, &lapack_option<
+            UpLo >::value, &lapack_option< Trans >::value, &m, &n, a, &lda,
+            tau, c, &ldc, work, &lwork, &info );
     return info;
 }
 
@@ -71,17 +72,17 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<double> value-type.
 //
-template< typename UpLo, typename Trans >
-inline std::ptrdiff_t unmtr( const char side, UpLo, Trans,
-        const fortran_int_t m, const fortran_int_t n,
+template< typename Side, typename UpLo, typename Trans >
+inline std::ptrdiff_t unmtr( const Side side, const UpLo uplo,
+        const Trans trans, const fortran_int_t m, const fortran_int_t n,
         const std::complex<double>* a, const fortran_int_t lda,
         const std::complex<double>* tau, std::complex<double>* c,
         const fortran_int_t ldc, std::complex<double>* work,
         const fortran_int_t lwork ) {
     fortran_int_t info(0);
-    LAPACK_ZUNMTR( &side, &lapack_option< UpLo >::value, &lapack_option<
-            Trans >::value, &m, &n, a, &lda, tau, c, &ldc, work, &lwork,
-            &info );
+    LAPACK_ZUNMTR( &lapack_option< Side >::value, &lapack_option<
+            UpLo >::value, &lapack_option< Trans >::value, &m, &n, a, &lda,
+            tau, c, &ldc, work, &lwork, &info );
     return info;
 }
 
@@ -103,9 +104,9 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC,
-            typename WORK >
-    static std::ptrdiff_t invoke( const char side, const MatrixA& a,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC, typename WORK >
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
             const VectorTAU& tau, MatrixC& c, detail::workspace1<
             WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -131,7 +132,6 @@
         BOOST_ASSERT( bindings::size_row(c) >= 0 );
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         return detail::unmtr( side, uplo(), trans(), bindings::size_row(c),
                 bindings::size_column(c), bindings::begin_value(a),
                 bindings::stride_major(a), bindings::begin_value(tau),
@@ -147,8 +147,9 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const MatrixA& a,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
             const VectorTAU& tau, MatrixC& c, minimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
@@ -165,8 +166,9 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename MatrixA, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const MatrixA& a,
+    template< typename Side, typename MatrixA, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const MatrixA& a,
             const VectorTAU& tau, MatrixC& c, optimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
         typedef typename result_of::trans_tag< MatrixA, order >::type trans;
@@ -186,12 +188,11 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
-    static std::ptrdiff_t min_size_work( const char side,
+    template< typename Side >
+    static std::ptrdiff_t min_size_work( const Side side,
             const std::ptrdiff_t m, const std::ptrdiff_t n ) {
-        if ( side == 'L' )
-            return std::max< std::ptrdiff_t >( 1, n );
-        else
-            return std::max< std::ptrdiff_t >( 1, m );
+        return std::max< std::ptrdiff_t >( 1, bindings::detail::if_left( side,
+                n, m ) );
     }
 };
 
@@ -210,11 +211,11 @@
 // * MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-unmtr( const char side, const MatrixA& a, const VectorTAU& tau,
+unmtr( const Side side, const MatrixA& a, const VectorTAU& tau,
         MatrixC& c, Workspace work ) {
     return unmtr_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, a, tau, c, work );
@@ -225,10 +226,11 @@
 // * MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-unmtr( const char side, const MatrixA& a, const VectorTAU& tau,
+unmtr( const Side side, const MatrixA& a, const VectorTAU& tau,
         MatrixC& c ) {
     return unmtr_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, a, tau, c, optimal_workspace() );
@@ -239,11 +241,11 @@
 // * const MatrixC&
 // * User-defined workspace
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-unmtr( const char side, const MatrixA& a, const VectorTAU& tau,
+unmtr( const Side side, const MatrixA& a, const VectorTAU& tau,
         const MatrixC& c, Workspace work ) {
     return unmtr_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, a, tau, c, work );
@@ -254,10 +256,11 @@
 // * const MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename MatrixA, typename VectorTAU, typename MatrixC >
+template< typename Side, typename MatrixA, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-unmtr( const char side, const MatrixA& a, const VectorTAU& tau,
+unmtr( const Side side, const MatrixA& a, const VectorTAU& tau,
         const MatrixC& c ) {
     return unmtr_impl< typename bindings::value_type<
             MatrixA >::type >::invoke( side, a, tau, c, optimal_workspace() );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/upmtr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/upmtr.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/computational/upmtr.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -51,15 +51,15 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<float> value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t upmtr( const char side, const char uplo, Trans,
-        const fortran_int_t m, const fortran_int_t n,
+template< typename Side, typename Trans >
+inline std::ptrdiff_t upmtr( const Side side, const char uplo,
+        const Trans trans, const fortran_int_t m, const fortran_int_t n,
         const std::complex<float>* ap, const std::complex<float>* tau,
         std::complex<float>* c, const fortran_int_t ldc,
         std::complex<float>* work ) {
     fortran_int_t info(0);
-    LAPACK_CUPMTR( &side, &uplo, &lapack_option< Trans >::value, &m, &n, ap,
-            tau, c, &ldc, work, &info );
+    LAPACK_CUPMTR( &lapack_option< Side >::value, &uplo, &lapack_option<
+            Trans >::value, &m, &n, ap, tau, c, &ldc, work, &info );
     return info;
 }
 
@@ -68,15 +68,15 @@
 // * netlib-compatible LAPACK backend (the default), and
 // * complex<double> value-type.
 //
-template< typename Trans >
-inline std::ptrdiff_t upmtr( const char side, const char uplo, Trans,
-        const fortran_int_t m, const fortran_int_t n,
+template< typename Side, typename Trans >
+inline std::ptrdiff_t upmtr( const Side side, const char uplo,
+        const Trans trans, const fortran_int_t m, const fortran_int_t n,
         const std::complex<double>* ap, const std::complex<double>* tau,
         std::complex<double>* c, const fortran_int_t ldc,
         std::complex<double>* work ) {
     fortran_int_t info(0);
-    LAPACK_ZUPMTR( &side, &uplo, &lapack_option< Trans >::value, &m, &n, ap,
-            tau, c, &ldc, work, &info );
+    LAPACK_ZUPMTR( &lapack_option< Side >::value, &uplo, &lapack_option<
+            Trans >::value, &m, &n, ap, tau, c, &ldc, work, &info );
     return info;
 }
 
@@ -98,9 +98,9 @@
     // * Deduces the required arguments for dispatching to LAPACK, and
     // * Asserts that most arguments make sense.
     //
-    template< typename VectorAP, typename VectorTAU, typename MatrixC,
-            typename WORK >
-    static std::ptrdiff_t invoke( const char side, const char uplo,
+    template< typename Side, typename VectorAP, typename VectorTAU,
+            typename MatrixC, typename WORK >
+    static std::ptrdiff_t invoke( const Side side, const char uplo,
             const VectorAP& ap, const VectorTAU& tau, MatrixC& c,
             detail::workspace1< WORK > work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -121,7 +121,6 @@
         BOOST_ASSERT( bindings::size_row(c) >= 0 );
         BOOST_ASSERT( bindings::stride_major(c) >= std::max< std::ptrdiff_t >(1,
                 bindings::size_row(c)) );
-        BOOST_ASSERT( side == 'L' || side == 'R' );
         return detail::upmtr( side, uplo, trans(), bindings::size_row(c),
                 bindings::size_column(c), bindings::begin_value(ap),
                 bindings::begin_value(tau), bindings::begin_value(c),
@@ -136,8 +135,9 @@
     //   invoke static member function
     // * Enables the unblocked algorithm (BLAS level 2)
     //
-    template< typename VectorAP, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const char uplo,
+    template< typename Side, typename VectorAP, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const char uplo,
             const VectorAP& ap, const VectorTAU& tau, MatrixC& c,
             minimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -153,8 +153,9 @@
     //   invoke static member
     // * Enables the blocked algorithm (BLAS level 3)
     //
-    template< typename VectorAP, typename VectorTAU, typename MatrixC >
-    static std::ptrdiff_t invoke( const char side, const char uplo,
+    template< typename Side, typename VectorAP, typename VectorTAU,
+            typename MatrixC >
+    static std::ptrdiff_t invoke( const Side side, const char uplo,
             const VectorAP& ap, const VectorTAU& tau, MatrixC& c,
             optimal_workspace work ) {
         namespace bindings = ::boost::numeric::bindings;
@@ -165,8 +166,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
@@ -185,11 +187,11 @@
 // * MatrixC&
 // * User-defined workspace
 //
-template< typename VectorAP, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename VectorAP, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-upmtr( const char side, const char uplo, const VectorAP& ap,
+upmtr( const Side side, const char uplo, const VectorAP& ap,
         const VectorTAU& tau, MatrixC& c, Workspace work ) {
     return upmtr_impl< typename bindings::value_type<
             VectorAP >::type >::invoke( side, uplo, ap, tau, c, work );
@@ -200,10 +202,11 @@
 // * MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename VectorAP, typename VectorTAU, typename MatrixC >
+template< typename Side, typename VectorAP, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-upmtr( const char side, const char uplo, const VectorAP& ap,
+upmtr( const Side side, const char uplo, const VectorAP& ap,
         const VectorTAU& tau, MatrixC& c ) {
     return upmtr_impl< typename bindings::value_type<
             VectorAP >::type >::invoke( side, uplo, ap, tau, c,
@@ -215,11 +218,11 @@
 // * const MatrixC&
 // * User-defined workspace
 //
-template< typename VectorAP, typename VectorTAU, typename MatrixC,
-        typename Workspace >
+template< typename Side, typename VectorAP, typename VectorTAU,
+        typename MatrixC, typename Workspace >
 inline typename boost::enable_if< detail::is_workspace< Workspace >,
         std::ptrdiff_t >::type
-upmtr( const char side, const char uplo, const VectorAP& ap,
+upmtr( const Side side, const char uplo, const VectorAP& ap,
         const VectorTAU& tau, const MatrixC& c, Workspace work ) {
     return upmtr_impl< typename bindings::value_type<
             VectorAP >::type >::invoke( side, uplo, ap, tau, c, work );
@@ -230,10 +233,11 @@
 // * const MatrixC&
 // * Default workspace-type (optimal)
 //
-template< typename VectorAP, typename VectorTAU, typename MatrixC >
+template< typename Side, typename VectorAP, typename VectorTAU,
+        typename MatrixC >
 inline typename boost::disable_if< detail::is_workspace< MatrixC >,
         std::ptrdiff_t >::type
-upmtr( const char side, const char uplo, const VectorAP& ap,
+upmtr( const Side side, const char uplo, const VectorAP& ap,
         const VectorTAU& tau, const MatrixC& c ) {
     return upmtr_impl< typename bindings::value_type<
             VectorAP >::type >::invoke( side, uplo, ap, tau, c,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/detail/lapack_option.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/detail/lapack_option.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/detail/lapack_option.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -9,8 +9,7 @@
 #ifndef BOOST_NUMERIC_BINDINGS_LAPACK_DETAIL_LAPACK_OPTION_HPP
 #define BOOST_NUMERIC_BINDINGS_LAPACK_DETAIL_LAPACK_OPTION_HPP
 
-#include <boost/mpl/char.hpp>
-#include <boost/numeric/bindings/tag.hpp>
+#include <boost/numeric/bindings/blas/detail/blas_option.hpp>
 
 namespace boost {
 namespace numeric {
@@ -19,34 +18,10 @@
 namespace detail {
 
 template< typename Tag >
-struct lapack_option {};
+struct lapack_option: bindings::blas::detail::blas_option< Tag > {};
 
 template<>
-struct lapack_option< tag::transpose >: mpl::char_< 'T' > {};
-
-template<>
-struct lapack_option< tag::no_transpose >: mpl::char_< 'N' > {};
-
-template<>
-struct lapack_option< tag::conjugate >: mpl::char_< 'C' > {};
-
-template<>
-struct lapack_option< tag::upper >: mpl::char_< 'U' > {};
-
-template<>
-struct lapack_option< tag::lower >: mpl::char_< 'L' > {};
-
-template<>
-struct lapack_option< tag::unit >: mpl::char_< 'U' > {};
-
-template<>
-struct lapack_option< tag::non_unit >: mpl::char_< 'N' > {};
-
-template<>
-struct lapack_option< tag::left >: mpl::char_< 'L' > {};
-
-template<>
-struct lapack_option< tag::right >: mpl::char_< 'R' > {};
+struct lapack_option< tag::both >: mpl::char_< 'B' > {};
 
 } // namespace detail
 } // namespace lapack
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/cgesv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/cgesv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/cgesv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -170,6 +170,7 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
         return n*nrhs;
     }
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/cposv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/cposv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/cposv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -51,7 +51,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t cposv( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t cposv( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, std::complex<double>* a,
         const fortran_int_t lda, const std::complex<double>* b,
         const fortran_int_t ldb, std::complex<double>* x,
@@ -168,8 +168,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 
     //
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gbsvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gbsvx.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gbsvx.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -55,8 +55,8 @@
 // * float value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gbsvx( const char fact, Trans, const fortran_int_t n,
-        const fortran_int_t kl, const fortran_int_t ku,
+inline std::ptrdiff_t gbsvx( const char fact, const Trans trans,
+        const fortran_int_t n, const fortran_int_t kl, const fortran_int_t ku,
         const fortran_int_t nrhs, float* ab, const fortran_int_t ldab,
         float* afb, const fortran_int_t ldafb, fortran_int_t* ipiv,
         char& equed, float* r, float* c, float* b, const fortran_int_t ldb,
@@ -75,8 +75,8 @@
 // * double value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gbsvx( const char fact, Trans, const fortran_int_t n,
-        const fortran_int_t kl, const fortran_int_t ku,
+inline std::ptrdiff_t gbsvx( const char fact, const Trans trans,
+        const fortran_int_t n, const fortran_int_t kl, const fortran_int_t ku,
         const fortran_int_t nrhs, double* ab, const fortran_int_t ldab,
         double* afb, const fortran_int_t ldafb, fortran_int_t* ipiv,
         char& equed, double* r, double* c, double* b, const fortran_int_t ldb,
@@ -95,8 +95,8 @@
 // * complex<float> value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gbsvx( const char fact, Trans, const fortran_int_t n,
-        const fortran_int_t kl, const fortran_int_t ku,
+inline std::ptrdiff_t gbsvx( const char fact, const Trans trans,
+        const fortran_int_t n, const fortran_int_t kl, const fortran_int_t ku,
         const fortran_int_t nrhs, std::complex<float>* ab,
         const fortran_int_t ldab, std::complex<float>* afb,
         const fortran_int_t ldafb, fortran_int_t* ipiv, char& equed, float* r,
@@ -116,8 +116,8 @@
 // * complex<double> value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gbsvx( const char fact, Trans, const fortran_int_t n,
-        const fortran_int_t kl, const fortran_int_t ku,
+inline std::ptrdiff_t gbsvx( const char fact, const Trans trans,
+        const fortran_int_t n, const fortran_int_t kl, const fortran_int_t ku,
         const fortran_int_t nrhs, std::complex<double>* ab,
         const fortran_int_t ldab, std::complex<double>* afb,
         const fortran_int_t ldafb, fortran_int_t* ipiv, char& equed,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gejsv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gejsv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gejsv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -177,40 +177,45 @@
     // Static member function that returns the minimum size of
     // workspace-array sva.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_sva( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 
     //
     // Static member function that returns the minimum size of
     // workspace-array u.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_u( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 
     //
     // Static member function that returns the minimum size of
     // workspace-array v.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_v( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 
     //
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 
     //
     // Static member function that returns the minimum size of
     // workspace-array iwork.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_iwork( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 };
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gels.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gels.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gels.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -55,7 +55,7 @@
 // * float value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gels( Trans, const fortran_int_t m,
+inline std::ptrdiff_t gels( const Trans trans, const fortran_int_t m,
         const fortran_int_t n, const fortran_int_t nrhs, float* a,
         const fortran_int_t lda, float* b, const fortran_int_t ldb,
         float* work, const fortran_int_t lwork ) {
@@ -71,7 +71,7 @@
 // * double value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gels( Trans, const fortran_int_t m,
+inline std::ptrdiff_t gels( const Trans trans, const fortran_int_t m,
         const fortran_int_t n, const fortran_int_t nrhs, double* a,
         const fortran_int_t lda, double* b, const fortran_int_t ldb,
         double* work, const fortran_int_t lwork ) {
@@ -87,7 +87,7 @@
 // * complex<float> value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gels( Trans, const fortran_int_t m,
+inline std::ptrdiff_t gels( const Trans trans, const fortran_int_t m,
         const fortran_int_t n, const fortran_int_t nrhs,
         std::complex<float>* a, const fortran_int_t lda,
         std::complex<float>* b, const fortran_int_t ldb,
@@ -104,7 +104,7 @@
 // * complex<double> value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gels( Trans, const fortran_int_t m,
+inline std::ptrdiff_t gels( const Trans trans, const fortran_int_t m,
         const fortran_int_t n, const fortran_int_t nrhs,
         std::complex<double>* a, const fortran_int_t lda,
         std::complex<double>* b, const fortran_int_t ldb,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gesvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gesvx.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gesvx.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -54,12 +54,13 @@
 // * float value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gesvx( const char fact, Trans, const fortran_int_t n,
-        const fortran_int_t nrhs, float* a, const fortran_int_t lda,
-        float* af, const fortran_int_t ldaf, fortran_int_t* ipiv, char& equed,
-        float* r, float* c, float* b, const fortran_int_t ldb, float* x,
-        const fortran_int_t ldx, float& rcond, float* ferr, float* berr,
-        float* work, fortran_int_t* iwork ) {
+inline std::ptrdiff_t gesvx( const char fact, const Trans trans,
+        const fortran_int_t n, const fortran_int_t nrhs, float* a,
+        const fortran_int_t lda, float* af, const fortran_int_t ldaf,
+        fortran_int_t* ipiv, char& equed, float* r, float* c, float* b,
+        const fortran_int_t ldb, float* x, const fortran_int_t ldx,
+        float& rcond, float* ferr, float* berr, float* work,
+        fortran_int_t* iwork ) {
     fortran_int_t info(0);
     LAPACK_SGESVX( &fact, &lapack_option< Trans >::value, &n, &nrhs, a, &lda,
             af, &ldaf, ipiv, &equed, r, c, b, &ldb, x, &ldx, &rcond, ferr,
@@ -73,12 +74,13 @@
 // * double value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gesvx( const char fact, Trans, const fortran_int_t n,
-        const fortran_int_t nrhs, double* a, const fortran_int_t lda,
-        double* af, const fortran_int_t ldaf, fortran_int_t* ipiv,
-        char& equed, double* r, double* c, double* b, const fortran_int_t ldb,
-        double* x, const fortran_int_t ldx, double& rcond, double* ferr,
-        double* berr, double* work, fortran_int_t* iwork ) {
+inline std::ptrdiff_t gesvx( const char fact, const Trans trans,
+        const fortran_int_t n, const fortran_int_t nrhs, double* a,
+        const fortran_int_t lda, double* af, const fortran_int_t ldaf,
+        fortran_int_t* ipiv, char& equed, double* r, double* c, double* b,
+        const fortran_int_t ldb, double* x, const fortran_int_t ldx,
+        double& rcond, double* ferr, double* berr, double* work,
+        fortran_int_t* iwork ) {
     fortran_int_t info(0);
     LAPACK_DGESVX( &fact, &lapack_option< Trans >::value, &n, &nrhs, a, &lda,
             af, &ldaf, ipiv, &equed, r, c, b, &ldb, x, &ldx, &rcond, ferr,
@@ -92,11 +94,12 @@
 // * complex<float> value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gesvx( const char fact, Trans, const fortran_int_t n,
-        const fortran_int_t nrhs, std::complex<float>* a,
-        const fortran_int_t lda, std::complex<float>* af,
-        const fortran_int_t ldaf, fortran_int_t* ipiv, char& equed, float* r,
-        float* c, std::complex<float>* b, const fortran_int_t ldb,
+inline std::ptrdiff_t gesvx( const char fact, const Trans trans,
+        const fortran_int_t n, const fortran_int_t nrhs,
+        std::complex<float>* a, const fortran_int_t lda,
+        std::complex<float>* af, const fortran_int_t ldaf,
+        fortran_int_t* ipiv, char& equed, float* r, float* c,
+        std::complex<float>* b, const fortran_int_t ldb,
         std::complex<float>* x, const fortran_int_t ldx, float& rcond,
         float* ferr, float* berr, std::complex<float>* work, float* rwork ) {
     fortran_int_t info(0);
@@ -112,11 +115,12 @@
 // * complex<double> value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gesvx( const char fact, Trans, const fortran_int_t n,
-        const fortran_int_t nrhs, std::complex<double>* a,
-        const fortran_int_t lda, std::complex<double>* af,
-        const fortran_int_t ldaf, fortran_int_t* ipiv, char& equed, double* r,
-        double* c, std::complex<double>* b, const fortran_int_t ldb,
+inline std::ptrdiff_t gesvx( const char fact, const Trans trans,
+        const fortran_int_t n, const fortran_int_t nrhs,
+        std::complex<double>* a, const fortran_int_t lda,
+        std::complex<double>* af, const fortran_int_t ldaf,
+        fortran_int_t* ipiv, char& equed, double* r, double* c,
+        std::complex<double>* b, const fortran_int_t ldb,
         std::complex<double>* x, const fortran_int_t ldx, double& rcond,
         double* ferr, double* berr, std::complex<double>* work,
         double* rwork ) {
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gtsvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gtsvx.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/gtsvx.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -54,12 +54,13 @@
 // * float value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gtsvx( const char fact, Trans, const fortran_int_t n,
-        const fortran_int_t nrhs, const float* dl, const float* d,
-        const float* du, float* dlf, float* df, float* duf, float* du2,
-        fortran_int_t* ipiv, const float* b, const fortran_int_t ldb,
-        float* x, const fortran_int_t ldx, float& rcond, float* ferr,
-        float* berr, float* work, fortran_int_t* iwork ) {
+inline std::ptrdiff_t gtsvx( const char fact, const Trans trans,
+        const fortran_int_t n, const fortran_int_t nrhs, const float* dl,
+        const float* d, const float* du, float* dlf, float* df, float* duf,
+        float* du2, fortran_int_t* ipiv, const float* b,
+        const fortran_int_t ldb, float* x, const fortran_int_t ldx,
+        float& rcond, float* ferr, float* berr, float* work,
+        fortran_int_t* iwork ) {
     fortran_int_t info(0);
     LAPACK_SGTSVX( &fact, &lapack_option< Trans >::value, &n, &nrhs, dl, d,
             du, dlf, df, duf, du2, ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr,
@@ -73,12 +74,13 @@
 // * double value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gtsvx( const char fact, Trans, const fortran_int_t n,
-        const fortran_int_t nrhs, const double* dl, const double* d,
-        const double* du, double* dlf, double* df, double* duf, double* du2,
-        fortran_int_t* ipiv, const double* b, const fortran_int_t ldb,
-        double* x, const fortran_int_t ldx, double& rcond, double* ferr,
-        double* berr, double* work, fortran_int_t* iwork ) {
+inline std::ptrdiff_t gtsvx( const char fact, const Trans trans,
+        const fortran_int_t n, const fortran_int_t nrhs, const double* dl,
+        const double* d, const double* du, double* dlf, double* df,
+        double* duf, double* du2, fortran_int_t* ipiv, const double* b,
+        const fortran_int_t ldb, double* x, const fortran_int_t ldx,
+        double& rcond, double* ferr, double* berr, double* work,
+        fortran_int_t* iwork ) {
     fortran_int_t info(0);
     LAPACK_DGTSVX( &fact, &lapack_option< Trans >::value, &n, &nrhs, dl, d,
             du, dlf, df, duf, du2, ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr,
@@ -92,15 +94,15 @@
 // * complex<float> value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gtsvx( const char fact, Trans, const fortran_int_t n,
-        const fortran_int_t nrhs, const std::complex<float>* dl,
-        const std::complex<float>* d, const std::complex<float>* du,
-        std::complex<float>* dlf, std::complex<float>* df,
-        std::complex<float>* duf, std::complex<float>* du2,
-        fortran_int_t* ipiv, const std::complex<float>* b,
-        const fortran_int_t ldb, std::complex<float>* x,
-        const fortran_int_t ldx, float& rcond, float* ferr, float* berr,
-        std::complex<float>* work, float* rwork ) {
+inline std::ptrdiff_t gtsvx( const char fact, const Trans trans,
+        const fortran_int_t n, const fortran_int_t nrhs,
+        const std::complex<float>* dl, const std::complex<float>* d,
+        const std::complex<float>* du, std::complex<float>* dlf,
+        std::complex<float>* df, std::complex<float>* duf,
+        std::complex<float>* du2, fortran_int_t* ipiv,
+        const std::complex<float>* b, const fortran_int_t ldb,
+        std::complex<float>* x, const fortran_int_t ldx, float& rcond,
+        float* ferr, float* berr, std::complex<float>* work, float* rwork ) {
     fortran_int_t info(0);
     LAPACK_CGTSVX( &fact, &lapack_option< Trans >::value, &n, &nrhs, dl, d,
             du, dlf, df, duf, du2, ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr,
@@ -114,15 +116,16 @@
 // * complex<double> value-type.
 //
 template< typename Trans >
-inline std::ptrdiff_t gtsvx( const char fact, Trans, const fortran_int_t n,
-        const fortran_int_t nrhs, const std::complex<double>* dl,
-        const std::complex<double>* d, const std::complex<double>* du,
-        std::complex<double>* dlf, std::complex<double>* df,
-        std::complex<double>* duf, std::complex<double>* du2,
-        fortran_int_t* ipiv, const std::complex<double>* b,
-        const fortran_int_t ldb, std::complex<double>* x,
-        const fortran_int_t ldx, double& rcond, double* ferr, double* berr,
-        std::complex<double>* work, double* rwork ) {
+inline std::ptrdiff_t gtsvx( const char fact, const Trans trans,
+        const fortran_int_t n, const fortran_int_t nrhs,
+        const std::complex<double>* dl, const std::complex<double>* d,
+        const std::complex<double>* du, std::complex<double>* dlf,
+        std::complex<double>* df, std::complex<double>* duf,
+        std::complex<double>* du2, fortran_int_t* ipiv,
+        const std::complex<double>* b, const fortran_int_t ldb,
+        std::complex<double>* x, const fortran_int_t ldx, double& rcond,
+        double* ferr, double* berr, std::complex<double>* work,
+        double* rwork ) {
     fortran_int_t info(0);
     LAPACK_ZGTSVX( &fact, &lapack_option< Trans >::value, &n, &nrhs, dl, d,
             du, dlf, df, duf, du2, ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbev.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbev.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbev.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,10 +52,11 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hbev( const char jobz, UpLo, const fortran_int_t n,
-        const fortran_int_t kd, std::complex<float>* ab,
-        const fortran_int_t ldab, float* w, std::complex<float>* z,
-        const fortran_int_t ldz, std::complex<float>* work, float* rwork ) {
+inline std::ptrdiff_t hbev( const char jobz, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t kd,
+        std::complex<float>* ab, const fortran_int_t ldab, float* w,
+        std::complex<float>* z, const fortran_int_t ldz,
+        std::complex<float>* work, float* rwork ) {
     fortran_int_t info(0);
     LAPACK_CHBEV( &jobz, &lapack_option< UpLo >::value, &n, &kd, ab, &ldab, w,
             z, &ldz, work, rwork, &info );
@@ -68,10 +69,11 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hbev( const char jobz, UpLo, const fortran_int_t n,
-        const fortran_int_t kd, std::complex<double>* ab,
-        const fortran_int_t ldab, double* w, std::complex<double>* z,
-        const fortran_int_t ldz, std::complex<double>* work, double* rwork ) {
+inline std::ptrdiff_t hbev( const char jobz, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t kd,
+        std::complex<double>* ab, const fortran_int_t ldab, double* w,
+        std::complex<double>* z, const fortran_int_t ldz,
+        std::complex<double>* work, double* rwork ) {
     fortran_int_t info(0);
     LAPACK_ZHBEV( &jobz, &lapack_option< UpLo >::value, &n, &kd, ab, &ldab, w,
             z, &ldz, work, rwork, &info );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbevd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbevd.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbevd.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -53,12 +53,13 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hbevd( const char jobz, UpLo, const fortran_int_t n,
-        const fortran_int_t kd, std::complex<float>* ab,
-        const fortran_int_t ldab, float* w, std::complex<float>* z,
-        const fortran_int_t ldz, std::complex<float>* work,
-        const fortran_int_t lwork, float* rwork, const fortran_int_t lrwork,
-        fortran_int_t* iwork, const fortran_int_t liwork ) {
+inline std::ptrdiff_t hbevd( const char jobz, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t kd,
+        std::complex<float>* ab, const fortran_int_t ldab, float* w,
+        std::complex<float>* z, const fortran_int_t ldz,
+        std::complex<float>* work, const fortran_int_t lwork, float* rwork,
+        const fortran_int_t lrwork, fortran_int_t* iwork,
+        const fortran_int_t liwork ) {
     fortran_int_t info(0);
     LAPACK_CHBEVD( &jobz, &lapack_option< UpLo >::value, &n, &kd, ab, &ldab,
             w, z, &ldz, work, &lwork, rwork, &lrwork, iwork, &liwork, &info );
@@ -71,12 +72,13 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hbevd( const char jobz, UpLo, const fortran_int_t n,
-        const fortran_int_t kd, std::complex<double>* ab,
-        const fortran_int_t ldab, double* w, std::complex<double>* z,
-        const fortran_int_t ldz, std::complex<double>* work,
-        const fortran_int_t lwork, double* rwork, const fortran_int_t lrwork,
-        fortran_int_t* iwork, const fortran_int_t liwork ) {
+inline std::ptrdiff_t hbevd( const char jobz, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t kd,
+        std::complex<double>* ab, const fortran_int_t ldab, double* w,
+        std::complex<double>* z, const fortran_int_t ldz,
+        std::complex<double>* work, const fortran_int_t lwork, double* rwork,
+        const fortran_int_t lrwork, fortran_int_t* iwork,
+        const fortran_int_t liwork ) {
     fortran_int_t info(0);
     LAPACK_ZHBEVD( &jobz, &lapack_option< UpLo >::value, &n, &kd, ab, &ldab,
             w, z, &ldz, work, &lwork, rwork, &lrwork, iwork, &liwork, &info );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbevx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbevx.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbevx.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,8 +52,8 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hbevx( const char jobz, const char range, UpLo,
-        const fortran_int_t n, const fortran_int_t kd,
+inline std::ptrdiff_t hbevx( const char jobz, const char range,
+        const UpLo uplo, const fortran_int_t n, const fortran_int_t kd,
         std::complex<float>* ab, const fortran_int_t ldab,
         std::complex<float>* q, const fortran_int_t ldq, const float vl,
         const float vu, const fortran_int_t il, const fortran_int_t iu,
@@ -74,8 +74,8 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hbevx( const char jobz, const char range, UpLo,
-        const fortran_int_t n, const fortran_int_t kd,
+inline std::ptrdiff_t hbevx( const char jobz, const char range,
+        const UpLo uplo, const fortran_int_t n, const fortran_int_t kd,
         std::complex<double>* ab, const fortran_int_t ldab,
         std::complex<double>* q, const fortran_int_t ldq, const double vl,
         const double vu, const fortran_int_t il, const fortran_int_t iu,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbgv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbgv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbgv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,8 +52,8 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hbgv( const char jobz, UpLo, const fortran_int_t n,
-        const fortran_int_t ka, const fortran_int_t kb,
+inline std::ptrdiff_t hbgv( const char jobz, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t ka, const fortran_int_t kb,
         std::complex<float>* ab, const fortran_int_t ldab,
         std::complex<float>* bb, const fortran_int_t ldbb, float* w,
         std::complex<float>* z, const fortran_int_t ldz,
@@ -70,8 +70,8 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hbgv( const char jobz, UpLo, const fortran_int_t n,
-        const fortran_int_t ka, const fortran_int_t kb,
+inline std::ptrdiff_t hbgv( const char jobz, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t ka, const fortran_int_t kb,
         std::complex<double>* ab, const fortran_int_t ldab,
         std::complex<double>* bb, const fortran_int_t ldbb, double* w,
         std::complex<double>* z, const fortran_int_t ldz,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbgvd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbgvd.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbgvd.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -53,8 +53,8 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hbgvd( const char jobz, UpLo, const fortran_int_t n,
-        const fortran_int_t ka, const fortran_int_t kb,
+inline std::ptrdiff_t hbgvd( const char jobz, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t ka, const fortran_int_t kb,
         std::complex<float>* ab, const fortran_int_t ldab,
         std::complex<float>* bb, const fortran_int_t ldbb, float* w,
         std::complex<float>* z, const fortran_int_t ldz,
@@ -74,8 +74,8 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hbgvd( const char jobz, UpLo, const fortran_int_t n,
-        const fortran_int_t ka, const fortran_int_t kb,
+inline std::ptrdiff_t hbgvd( const char jobz, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t ka, const fortran_int_t kb,
         std::complex<double>* ab, const fortran_int_t ldab,
         std::complex<double>* bb, const fortran_int_t ldbb, double* w,
         std::complex<double>* z, const fortran_int_t ldz,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbgvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbgvx.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hbgvx.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,16 +52,16 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hbgvx( const char jobz, const char range, UpLo,
-        const fortran_int_t n, const fortran_int_t ka, const fortran_int_t kb,
-        std::complex<float>* ab, const fortran_int_t ldab,
-        std::complex<float>* bb, const fortran_int_t ldbb,
-        std::complex<float>* q, const fortran_int_t ldq, const float vl,
-        const float vu, const fortran_int_t il, const fortran_int_t iu,
-        const float abstol, fortran_int_t& m, float* w,
-        std::complex<float>* z, const fortran_int_t ldz,
-        std::complex<float>* work, float* rwork, fortran_int_t* iwork,
-        fortran_int_t* ifail ) {
+inline std::ptrdiff_t hbgvx( const char jobz, const char range,
+        const UpLo uplo, const fortran_int_t n, const fortran_int_t ka,
+        const fortran_int_t kb, std::complex<float>* ab,
+        const fortran_int_t ldab, std::complex<float>* bb,
+        const fortran_int_t ldbb, std::complex<float>* q,
+        const fortran_int_t ldq, const float vl, const float vu,
+        const fortran_int_t il, const fortran_int_t iu, const float abstol,
+        fortran_int_t& m, float* w, std::complex<float>* z,
+        const fortran_int_t ldz, std::complex<float>* work, float* rwork,
+        fortran_int_t* iwork, fortran_int_t* ifail ) {
     fortran_int_t info(0);
     LAPACK_CHBGVX( &jobz, &range, &lapack_option< UpLo >::value, &n, &ka, &kb,
             ab, &ldab, bb, &ldbb, q, &ldq, &vl, &vu, &il, &iu, &abstol, &m, w,
@@ -75,16 +75,16 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hbgvx( const char jobz, const char range, UpLo,
-        const fortran_int_t n, const fortran_int_t ka, const fortran_int_t kb,
-        std::complex<double>* ab, const fortran_int_t ldab,
-        std::complex<double>* bb, const fortran_int_t ldbb,
-        std::complex<double>* q, const fortran_int_t ldq, const double vl,
-        const double vu, const fortran_int_t il, const fortran_int_t iu,
-        const double abstol, fortran_int_t& m, double* w,
-        std::complex<double>* z, const fortran_int_t ldz,
-        std::complex<double>* work, double* rwork, fortran_int_t* iwork,
-        fortran_int_t* ifail ) {
+inline std::ptrdiff_t hbgvx( const char jobz, const char range,
+        const UpLo uplo, const fortran_int_t n, const fortran_int_t ka,
+        const fortran_int_t kb, std::complex<double>* ab,
+        const fortran_int_t ldab, std::complex<double>* bb,
+        const fortran_int_t ldbb, std::complex<double>* q,
+        const fortran_int_t ldq, const double vl, const double vu,
+        const fortran_int_t il, const fortran_int_t iu, const double abstol,
+        fortran_int_t& m, double* w, std::complex<double>* z,
+        const fortran_int_t ldz, std::complex<double>* work, double* rwork,
+        fortran_int_t* iwork, fortran_int_t* ifail ) {
     fortran_int_t info(0);
     LAPACK_ZHBGVX( &jobz, &range, &lapack_option< UpLo >::value, &n, &ka, &kb,
             ab, &ldab, bb, &ldbb, q, &ldq, &vl, &vu, &il, &iu, &abstol, &m, w,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heev.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heev.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heev.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,9 +52,10 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t heev( const char jobz, UpLo, const fortran_int_t n,
-        std::complex<float>* a, const fortran_int_t lda, float* w,
-        std::complex<float>* work, const fortran_int_t lwork, float* rwork ) {
+inline std::ptrdiff_t heev( const char jobz, const UpLo uplo,
+        const fortran_int_t n, std::complex<float>* a,
+        const fortran_int_t lda, float* w, std::complex<float>* work,
+        const fortran_int_t lwork, float* rwork ) {
     fortran_int_t info(0);
     LAPACK_CHEEV( &jobz, &lapack_option< UpLo >::value, &n, a, &lda, w, work,
             &lwork, rwork, &info );
@@ -67,10 +68,10 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t heev( const char jobz, UpLo, const fortran_int_t n,
-        std::complex<double>* a, const fortran_int_t lda, double* w,
-        std::complex<double>* work, const fortran_int_t lwork,
-        double* rwork ) {
+inline std::ptrdiff_t heev( const char jobz, const UpLo uplo,
+        const fortran_int_t n, std::complex<double>* a,
+        const fortran_int_t lda, double* w, std::complex<double>* work,
+        const fortran_int_t lwork, double* rwork ) {
     fortran_int_t info(0);
     LAPACK_ZHEEV( &jobz, &lapack_option< UpLo >::value, &n, a, &lda, w, work,
             &lwork, rwork, &info );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heevd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heevd.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heevd.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,11 +52,11 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t heevd( const char jobz, UpLo, const fortran_int_t n,
-        std::complex<float>* a, const fortran_int_t lda, float* w,
-        std::complex<float>* work, const fortran_int_t lwork, float* rwork,
-        const fortran_int_t lrwork, fortran_int_t* iwork,
-        const fortran_int_t liwork ) {
+inline std::ptrdiff_t heevd( const char jobz, const UpLo uplo,
+        const fortran_int_t n, std::complex<float>* a,
+        const fortran_int_t lda, float* w, std::complex<float>* work,
+        const fortran_int_t lwork, float* rwork, const fortran_int_t lrwork,
+        fortran_int_t* iwork, const fortran_int_t liwork ) {
     fortran_int_t info(0);
     LAPACK_CHEEVD( &jobz, &lapack_option< UpLo >::value, &n, a, &lda, w, work,
             &lwork, rwork, &lrwork, iwork, &liwork, &info );
@@ -69,11 +69,11 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t heevd( const char jobz, UpLo, const fortran_int_t n,
-        std::complex<double>* a, const fortran_int_t lda, double* w,
-        std::complex<double>* work, const fortran_int_t lwork, double* rwork,
-        const fortran_int_t lrwork, fortran_int_t* iwork,
-        const fortran_int_t liwork ) {
+inline std::ptrdiff_t heevd( const char jobz, const UpLo uplo,
+        const fortran_int_t n, std::complex<double>* a,
+        const fortran_int_t lda, double* w, std::complex<double>* work,
+        const fortran_int_t lwork, double* rwork, const fortran_int_t lrwork,
+        fortran_int_t* iwork, const fortran_int_t liwork ) {
     fortran_int_t info(0);
     LAPACK_ZHEEVD( &jobz, &lapack_option< UpLo >::value, &n, a, &lda, w, work,
             &lwork, rwork, &lrwork, iwork, &liwork, &info );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heevr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heevr.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heevr.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,8 +52,8 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t heevr( const char jobz, const char range, UpLo,
-        const fortran_int_t n, std::complex<float>* a,
+inline std::ptrdiff_t heevr( const char jobz, const char range,
+        const UpLo uplo, const fortran_int_t n, std::complex<float>* a,
         const fortran_int_t lda, const float vl, const float vu,
         const fortran_int_t il, const fortran_int_t iu, const float abstol,
         fortran_int_t& m, float* w, std::complex<float>* z,
@@ -74,8 +74,8 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t heevr( const char jobz, const char range, UpLo,
-        const fortran_int_t n, std::complex<double>* a,
+inline std::ptrdiff_t heevr( const char jobz, const char range,
+        const UpLo uplo, const fortran_int_t n, std::complex<double>* a,
         const fortran_int_t lda, const double vl, const double vu,
         const fortran_int_t il, const fortran_int_t iu, const double abstol,
         fortran_int_t& m, double* w, std::complex<double>* z,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heevx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heevx.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/heevx.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,8 +52,8 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t heevx( const char jobz, const char range, UpLo,
-        const fortran_int_t n, std::complex<float>* a,
+inline std::ptrdiff_t heevx( const char jobz, const char range,
+        const UpLo uplo, const fortran_int_t n, std::complex<float>* a,
         const fortran_int_t lda, const float vl, const float vu,
         const fortran_int_t il, const fortran_int_t iu, const float abstol,
         fortran_int_t& m, float* w, std::complex<float>* z,
@@ -73,8 +73,8 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t heevx( const char jobz, const char range, UpLo,
-        const fortran_int_t n, std::complex<double>* a,
+inline std::ptrdiff_t heevx( const char jobz, const char range,
+        const UpLo uplo, const fortran_int_t n, std::complex<double>* a,
         const fortran_int_t lda, const double vl, const double vu,
         const fortran_int_t il, const fortran_int_t iu, const double abstol,
         fortran_int_t& m, double* w, std::complex<double>* z,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hegv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hegv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hegv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,8 +52,8 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hegv( const fortran_int_t itype, const char jobz, UpLo,
-        const fortran_int_t n, std::complex<float>* a,
+inline std::ptrdiff_t hegv( const fortran_int_t itype, const char jobz,
+        const UpLo uplo, const fortran_int_t n, std::complex<float>* a,
         const fortran_int_t lda, std::complex<float>* b,
         const fortran_int_t ldb, float* w, std::complex<float>* work,
         const fortran_int_t lwork, float* rwork ) {
@@ -69,8 +69,8 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hegv( const fortran_int_t itype, const char jobz, UpLo,
-        const fortran_int_t n, std::complex<double>* a,
+inline std::ptrdiff_t hegv( const fortran_int_t itype, const char jobz,
+        const UpLo uplo, const fortran_int_t n, std::complex<double>* a,
         const fortran_int_t lda, std::complex<double>* b,
         const fortran_int_t ldb, double* w, std::complex<double>* work,
         const fortran_int_t lwork, double* rwork ) {
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hegvd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hegvd.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hegvd.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,8 +52,8 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hegvd( const fortran_int_t itype, const char jobz, UpLo,
-        const fortran_int_t n, std::complex<float>* a,
+inline std::ptrdiff_t hegvd( const fortran_int_t itype, const char jobz,
+        const UpLo uplo, const fortran_int_t n, std::complex<float>* a,
         const fortran_int_t lda, std::complex<float>* b,
         const fortran_int_t ldb, float* w, std::complex<float>* work,
         const fortran_int_t lwork, float* rwork, const fortran_int_t lrwork,
@@ -70,8 +70,8 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hegvd( const fortran_int_t itype, const char jobz, UpLo,
-        const fortran_int_t n, std::complex<double>* a,
+inline std::ptrdiff_t hegvd( const fortran_int_t itype, const char jobz,
+        const UpLo uplo, const fortran_int_t n, std::complex<double>* a,
         const fortran_int_t lda, std::complex<double>* b,
         const fortran_int_t ldb, double* w, std::complex<double>* work,
         const fortran_int_t lwork, double* rwork, const fortran_int_t lrwork,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hegvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hegvx.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hegvx.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -53,14 +53,14 @@
 //
 template< typename UpLo >
 inline std::ptrdiff_t hegvx( const fortran_int_t itype, const char jobz,
-        const char range, UpLo, const fortran_int_t n, std::complex<float>* a,
-        const fortran_int_t lda, std::complex<float>* b,
-        const fortran_int_t ldb, const float vl, const float vu,
-        const fortran_int_t il, const fortran_int_t iu, const float abstol,
-        fortran_int_t& m, float* w, std::complex<float>* z,
-        const fortran_int_t ldz, std::complex<float>* work,
-        const fortran_int_t lwork, float* rwork, fortran_int_t* iwork,
-        fortran_int_t* ifail ) {
+        const char range, const UpLo uplo, const fortran_int_t n,
+        std::complex<float>* a, const fortran_int_t lda,
+        std::complex<float>* b, const fortran_int_t ldb, const float vl,
+        const float vu, const fortran_int_t il, const fortran_int_t iu,
+        const float abstol, fortran_int_t& m, float* w,
+        std::complex<float>* z, const fortran_int_t ldz,
+        std::complex<float>* work, const fortran_int_t lwork, float* rwork,
+        fortran_int_t* iwork, fortran_int_t* ifail ) {
     fortran_int_t info(0);
     LAPACK_CHEGVX( &itype, &jobz, &range, &lapack_option< UpLo >::value, &n,
             a, &lda, b, &ldb, &vl, &vu, &il, &iu, &abstol, &m, w, z, &ldz,
@@ -75,7 +75,7 @@
 //
 template< typename UpLo >
 inline std::ptrdiff_t hegvx( const fortran_int_t itype, const char jobz,
-        const char range, UpLo, const fortran_int_t n,
+        const char range, const UpLo uplo, const fortran_int_t n,
         std::complex<double>* a, const fortran_int_t lda,
         std::complex<double>* b, const fortran_int_t ldb, const double vl,
         const double vu, const fortran_int_t il, const fortran_int_t iu,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hesv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hesv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hesv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,7 +52,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hesv( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t hesv( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, std::complex<float>* a,
         const fortran_int_t lda, fortran_int_t* ipiv, std::complex<float>* b,
         const fortran_int_t ldb, std::complex<float>* work,
@@ -69,7 +69,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hesv( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t hesv( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, std::complex<double>* a,
         const fortran_int_t lda, fortran_int_t* ipiv, std::complex<double>* b,
         const fortran_int_t ldb, std::complex<double>* work,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hesvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hesvx.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hesvx.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,14 +52,14 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hesvx( const char fact, UpLo, const fortran_int_t n,
-        const fortran_int_t nrhs, const std::complex<float>* a,
-        const fortran_int_t lda, std::complex<float>* af,
-        const fortran_int_t ldaf, fortran_int_t* ipiv,
-        const std::complex<float>* b, const fortran_int_t ldb,
-        std::complex<float>* x, const fortran_int_t ldx, float& rcond,
-        float* ferr, float* berr, std::complex<float>* work,
-        const fortran_int_t lwork, float* rwork ) {
+inline std::ptrdiff_t hesvx( const char fact, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t nrhs,
+        const std::complex<float>* a, const fortran_int_t lda,
+        std::complex<float>* af, const fortran_int_t ldaf,
+        fortran_int_t* ipiv, const std::complex<float>* b,
+        const fortran_int_t ldb, std::complex<float>* x,
+        const fortran_int_t ldx, float& rcond, float* ferr, float* berr,
+        std::complex<float>* work, const fortran_int_t lwork, float* rwork ) {
     fortran_int_t info(0);
     LAPACK_CHESVX( &fact, &lapack_option< UpLo >::value, &n, &nrhs, a, &lda,
             af, &ldaf, ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr, work,
@@ -73,14 +73,15 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hesvx( const char fact, UpLo, const fortran_int_t n,
-        const fortran_int_t nrhs, const std::complex<double>* a,
-        const fortran_int_t lda, std::complex<double>* af,
-        const fortran_int_t ldaf, fortran_int_t* ipiv,
-        const std::complex<double>* b, const fortran_int_t ldb,
-        std::complex<double>* x, const fortran_int_t ldx, double& rcond,
-        double* ferr, double* berr, std::complex<double>* work,
-        const fortran_int_t lwork, double* rwork ) {
+inline std::ptrdiff_t hesvx( const char fact, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t nrhs,
+        const std::complex<double>* a, const fortran_int_t lda,
+        std::complex<double>* af, const fortran_int_t ldaf,
+        fortran_int_t* ipiv, const std::complex<double>* b,
+        const fortran_int_t ldb, std::complex<double>* x,
+        const fortran_int_t ldx, double& rcond, double* ferr, double* berr,
+        std::complex<double>* work, const fortran_int_t lwork,
+        double* rwork ) {
     fortran_int_t info(0);
     LAPACK_ZHESVX( &fact, &lapack_option< UpLo >::value, &n, &nrhs, a, &lda,
             af, &ldaf, ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr, work,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpev.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpev.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpev.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -51,9 +51,10 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hpev( const char jobz, UpLo, const fortran_int_t n,
-        std::complex<float>* ap, float* w, std::complex<float>* z,
-        const fortran_int_t ldz, std::complex<float>* work, float* rwork ) {
+inline std::ptrdiff_t hpev( const char jobz, const UpLo uplo,
+        const fortran_int_t n, std::complex<float>* ap, float* w,
+        std::complex<float>* z, const fortran_int_t ldz,
+        std::complex<float>* work, float* rwork ) {
     fortran_int_t info(0);
     LAPACK_CHPEV( &jobz, &lapack_option< UpLo >::value, &n, ap, w, z, &ldz,
             work, rwork, &info );
@@ -66,9 +67,10 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hpev( const char jobz, UpLo, const fortran_int_t n,
-        std::complex<double>* ap, double* w, std::complex<double>* z,
-        const fortran_int_t ldz, std::complex<double>* work, double* rwork ) {
+inline std::ptrdiff_t hpev( const char jobz, const UpLo uplo,
+        const fortran_int_t n, std::complex<double>* ap, double* w,
+        std::complex<double>* z, const fortran_int_t ldz,
+        std::complex<double>* work, double* rwork ) {
     fortran_int_t info(0);
     LAPACK_ZHPEV( &jobz, &lapack_option< UpLo >::value, &n, ap, w, z, &ldz,
             work, rwork, &info );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpevd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpevd.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpevd.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,11 +52,12 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hpevd( const char jobz, UpLo, const fortran_int_t n,
-        std::complex<float>* ap, float* w, std::complex<float>* z,
-        const fortran_int_t ldz, std::complex<float>* work,
-        const fortran_int_t lwork, float* rwork, const fortran_int_t lrwork,
-        fortran_int_t* iwork, const fortran_int_t liwork ) {
+inline std::ptrdiff_t hpevd( const char jobz, const UpLo uplo,
+        const fortran_int_t n, std::complex<float>* ap, float* w,
+        std::complex<float>* z, const fortran_int_t ldz,
+        std::complex<float>* work, const fortran_int_t lwork, float* rwork,
+        const fortran_int_t lrwork, fortran_int_t* iwork,
+        const fortran_int_t liwork ) {
     fortran_int_t info(0);
     LAPACK_CHPEVD( &jobz, &lapack_option< UpLo >::value, &n, ap, w, z, &ldz,
             work, &lwork, rwork, &lrwork, iwork, &liwork, &info );
@@ -69,11 +70,12 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hpevd( const char jobz, UpLo, const fortran_int_t n,
-        std::complex<double>* ap, double* w, std::complex<double>* z,
-        const fortran_int_t ldz, std::complex<double>* work,
-        const fortran_int_t lwork, double* rwork, const fortran_int_t lrwork,
-        fortran_int_t* iwork, const fortran_int_t liwork ) {
+inline std::ptrdiff_t hpevd( const char jobz, const UpLo uplo,
+        const fortran_int_t n, std::complex<double>* ap, double* w,
+        std::complex<double>* z, const fortran_int_t ldz,
+        std::complex<double>* work, const fortran_int_t lwork, double* rwork,
+        const fortran_int_t lrwork, fortran_int_t* iwork,
+        const fortran_int_t liwork ) {
     fortran_int_t info(0);
     LAPACK_ZHPEVD( &jobz, &lapack_option< UpLo >::value, &n, ap, w, z, &ldz,
             work, &lwork, rwork, &lrwork, iwork, &liwork, &info );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpevx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpevx.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpevx.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -51,11 +51,11 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hpevx( const char jobz, const char range, UpLo,
-        const fortran_int_t n, std::complex<float>* ap, const float vl,
-        const float vu, const fortran_int_t il, const fortran_int_t iu,
-        const float abstol, fortran_int_t& m, float* w,
-        std::complex<float>* z, const fortran_int_t ldz,
+inline std::ptrdiff_t hpevx( const char jobz, const char range,
+        const UpLo uplo, const fortran_int_t n, std::complex<float>* ap,
+        const float vl, const float vu, const fortran_int_t il,
+        const fortran_int_t iu, const float abstol, fortran_int_t& m,
+        float* w, std::complex<float>* z, const fortran_int_t ldz,
         std::complex<float>* work, float* rwork, fortran_int_t* iwork,
         fortran_int_t* ifail ) {
     fortran_int_t info(0);
@@ -71,11 +71,11 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hpevx( const char jobz, const char range, UpLo,
-        const fortran_int_t n, std::complex<double>* ap, const double vl,
-        const double vu, const fortran_int_t il, const fortran_int_t iu,
-        const double abstol, fortran_int_t& m, double* w,
-        std::complex<double>* z, const fortran_int_t ldz,
+inline std::ptrdiff_t hpevx( const char jobz, const char range,
+        const UpLo uplo, const fortran_int_t n, std::complex<double>* ap,
+        const double vl, const double vu, const fortran_int_t il,
+        const fortran_int_t iu, const double abstol, fortran_int_t& m,
+        double* w, std::complex<double>* z, const fortran_int_t ldz,
         std::complex<double>* work, double* rwork, fortran_int_t* iwork,
         fortran_int_t* ifail ) {
     fortran_int_t info(0);
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpgv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpgv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpgv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -51,8 +51,8 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hpgv( const fortran_int_t itype, const char jobz, UpLo,
-        const fortran_int_t n, std::complex<float>* ap,
+inline std::ptrdiff_t hpgv( const fortran_int_t itype, const char jobz,
+        const UpLo uplo, const fortran_int_t n, std::complex<float>* ap,
         std::complex<float>* bp, float* w, std::complex<float>* z,
         const fortran_int_t ldz, std::complex<float>* work, float* rwork ) {
     fortran_int_t info(0);
@@ -67,8 +67,8 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hpgv( const fortran_int_t itype, const char jobz, UpLo,
-        const fortran_int_t n, std::complex<double>* ap,
+inline std::ptrdiff_t hpgv( const fortran_int_t itype, const char jobz,
+        const UpLo uplo, const fortran_int_t n, std::complex<double>* ap,
         std::complex<double>* bp, double* w, std::complex<double>* z,
         const fortran_int_t ldz, std::complex<double>* work, double* rwork ) {
     fortran_int_t info(0);
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpgvd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpgvd.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpgvd.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,8 +52,8 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hpgvd( const fortran_int_t itype, const char jobz, UpLo,
-        const fortran_int_t n, std::complex<float>* ap,
+inline std::ptrdiff_t hpgvd( const fortran_int_t itype, const char jobz,
+        const UpLo uplo, const fortran_int_t n, std::complex<float>* ap,
         std::complex<float>* bp, float* w, std::complex<float>* z,
         const fortran_int_t ldz, std::complex<float>* work,
         const fortran_int_t lwork, float* rwork, const fortran_int_t lrwork,
@@ -70,8 +70,8 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hpgvd( const fortran_int_t itype, const char jobz, UpLo,
-        const fortran_int_t n, std::complex<double>* ap,
+inline std::ptrdiff_t hpgvd( const fortran_int_t itype, const char jobz,
+        const UpLo uplo, const fortran_int_t n, std::complex<double>* ap,
         std::complex<double>* bp, double* w, std::complex<double>* z,
         const fortran_int_t ldz, std::complex<double>* work,
         const fortran_int_t lwork, double* rwork, const fortran_int_t lrwork,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpgvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpgvx.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpgvx.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,7 +52,7 @@
 //
 template< typename UpLo >
 inline std::ptrdiff_t hpgvx( const fortran_int_t itype, const char jobz,
-        const char range, UpLo, const fortran_int_t n,
+        const char range, const UpLo uplo, const fortran_int_t n,
         std::complex<float>* ap, std::complex<float>* bp, const float vl,
         const float vu, const fortran_int_t il, const fortran_int_t iu,
         const float abstol, fortran_int_t& m, float* w,
@@ -73,7 +73,7 @@
 //
 template< typename UpLo >
 inline std::ptrdiff_t hpgvx( const fortran_int_t itype, const char jobz,
-        const char range, UpLo, const fortran_int_t n,
+        const char range, const UpLo uplo, const fortran_int_t n,
         std::complex<double>* ap, std::complex<double>* bp, const double vl,
         const double vu, const fortran_int_t il, const fortran_int_t iu,
         const double abstol, fortran_int_t& m, double* w,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpsv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpsv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpsv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -49,7 +49,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hpsv( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t hpsv( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, std::complex<float>* ap,
         fortran_int_t* ipiv, std::complex<float>* b,
         const fortran_int_t ldb ) {
@@ -65,7 +65,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hpsv( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t hpsv( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, std::complex<double>* ap,
         fortran_int_t* ipiv, std::complex<double>* b,
         const fortran_int_t ldb ) {
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpsvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpsvx.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/hpsvx.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -51,12 +51,13 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hpsvx( const char fact, UpLo, const fortran_int_t n,
-        const fortran_int_t nrhs, const std::complex<float>* ap,
-        std::complex<float>* afp, fortran_int_t* ipiv,
-        const std::complex<float>* b, const fortran_int_t ldb,
-        std::complex<float>* x, const fortran_int_t ldx, float& rcond,
-        float* ferr, float* berr, std::complex<float>* work, float* rwork ) {
+inline std::ptrdiff_t hpsvx( const char fact, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t nrhs,
+        const std::complex<float>* ap, std::complex<float>* afp,
+        fortran_int_t* ipiv, const std::complex<float>* b,
+        const fortran_int_t ldb, std::complex<float>* x,
+        const fortran_int_t ldx, float& rcond, float* ferr, float* berr,
+        std::complex<float>* work, float* rwork ) {
     fortran_int_t info(0);
     LAPACK_CHPSVX( &fact, &lapack_option< UpLo >::value, &n, &nrhs, ap, afp,
             ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr, work, rwork, &info );
@@ -69,13 +70,13 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t hpsvx( const char fact, UpLo, const fortran_int_t n,
-        const fortran_int_t nrhs, const std::complex<double>* ap,
-        std::complex<double>* afp, fortran_int_t* ipiv,
-        const std::complex<double>* b, const fortran_int_t ldb,
-        std::complex<double>* x, const fortran_int_t ldx, double& rcond,
-        double* ferr, double* berr, std::complex<double>* work,
-        double* rwork ) {
+inline std::ptrdiff_t hpsvx( const char fact, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t nrhs,
+        const std::complex<double>* ap, std::complex<double>* afp,
+        fortran_int_t* ipiv, const std::complex<double>* b,
+        const fortran_int_t ldb, std::complex<double>* x,
+        const fortran_int_t ldx, double& rcond, double* ferr, double* berr,
+        std::complex<double>* work, double* rwork ) {
     fortran_int_t info(0);
     LAPACK_ZHPSVX( &fact, &lapack_option< UpLo >::value, &n, &nrhs, ap, afp,
             ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr, work, rwork, &info );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/pbsv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/pbsv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/pbsv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -50,7 +50,7 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pbsv( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pbsv( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t kd, const fortran_int_t nrhs, float* ab,
         const fortran_int_t ldab, float* b, const fortran_int_t ldb ) {
     fortran_int_t info(0);
@@ -65,7 +65,7 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pbsv( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pbsv( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t kd, const fortran_int_t nrhs, double* ab,
         const fortran_int_t ldab, double* b, const fortran_int_t ldb ) {
     fortran_int_t info(0);
@@ -80,7 +80,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pbsv( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pbsv( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t kd, const fortran_int_t nrhs,
         std::complex<float>* ab, const fortran_int_t ldab,
         std::complex<float>* b, const fortran_int_t ldb ) {
@@ -96,7 +96,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pbsv( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t pbsv( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t kd, const fortran_int_t nrhs,
         std::complex<double>* ab, const fortran_int_t ldab,
         std::complex<double>* b, const fortran_int_t ldb ) {
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/pbsvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/pbsvx.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/pbsvx.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -55,12 +55,13 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pbsvx( const char fact, UpLo, const fortran_int_t n,
-        const fortran_int_t kd, const fortran_int_t nrhs, float* ab,
-        const fortran_int_t ldab, float* afb, const fortran_int_t ldafb,
-        char& equed, float* s, float* b, const fortran_int_t ldb, float* x,
-        const fortran_int_t ldx, float& rcond, float* ferr, float* berr,
-        float* work, fortran_int_t* iwork ) {
+inline std::ptrdiff_t pbsvx( const char fact, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t kd,
+        const fortran_int_t nrhs, float* ab, const fortran_int_t ldab,
+        float* afb, const fortran_int_t ldafb, char& equed, float* s,
+        float* b, const fortran_int_t ldb, float* x, const fortran_int_t ldx,
+        float& rcond, float* ferr, float* berr, float* work,
+        fortran_int_t* iwork ) {
     fortran_int_t info(0);
     LAPACK_SPBSVX( &fact, &lapack_option< UpLo >::value, &n, &kd, &nrhs, ab,
             &ldab, afb, &ldafb, &equed, s, b, &ldb, x, &ldx, &rcond, ferr,
@@ -74,10 +75,11 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pbsvx( const char fact, UpLo, const fortran_int_t n,
-        const fortran_int_t kd, const fortran_int_t nrhs, double* ab,
-        const fortran_int_t ldab, double* afb, const fortran_int_t ldafb,
-        char& equed, double* s, double* b, const fortran_int_t ldb, double* x,
+inline std::ptrdiff_t pbsvx( const char fact, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t kd,
+        const fortran_int_t nrhs, double* ab, const fortran_int_t ldab,
+        double* afb, const fortran_int_t ldafb, char& equed, double* s,
+        double* b, const fortran_int_t ldb, double* x,
         const fortran_int_t ldx, double& rcond, double* ferr, double* berr,
         double* work, fortran_int_t* iwork ) {
     fortran_int_t info(0);
@@ -93,11 +95,12 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pbsvx( const char fact, UpLo, const fortran_int_t n,
-        const fortran_int_t kd, const fortran_int_t nrhs,
-        std::complex<float>* ab, const fortran_int_t ldab,
-        std::complex<float>* afb, const fortran_int_t ldafb, char& equed,
-        float* s, std::complex<float>* b, const fortran_int_t ldb,
+inline std::ptrdiff_t pbsvx( const char fact, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t kd,
+        const fortran_int_t nrhs, std::complex<float>* ab,
+        const fortran_int_t ldab, std::complex<float>* afb,
+        const fortran_int_t ldafb, char& equed, float* s,
+        std::complex<float>* b, const fortran_int_t ldb,
         std::complex<float>* x, const fortran_int_t ldx, float& rcond,
         float* ferr, float* berr, std::complex<float>* work, float* rwork ) {
     fortran_int_t info(0);
@@ -113,11 +116,12 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t pbsvx( const char fact, UpLo, const fortran_int_t n,
-        const fortran_int_t kd, const fortran_int_t nrhs,
-        std::complex<double>* ab, const fortran_int_t ldab,
-        std::complex<double>* afb, const fortran_int_t ldafb, char& equed,
-        double* s, std::complex<double>* b, const fortran_int_t ldb,
+inline std::ptrdiff_t pbsvx( const char fact, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t kd,
+        const fortran_int_t nrhs, std::complex<double>* ab,
+        const fortran_int_t ldab, std::complex<double>* afb,
+        const fortran_int_t ldafb, char& equed, double* s,
+        std::complex<double>* b, const fortran_int_t ldb,
         std::complex<double>* x, const fortran_int_t ldx, double& rcond,
         double* ferr, double* berr, std::complex<double>* work,
         double* rwork ) {
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/posv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/posv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/posv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -58,8 +58,8 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t posv( Order, UpLo, const int n, const int nrhs, float* a,
-        const int lda, float* b, const int ldb ) {
+inline std::ptrdiff_t posv( Order, const UpLo uplo, const int n,
+        const int nrhs, float* a, const int lda, float* b, const int ldb ) {
     return clapack_sposv( clapack_option< Order >::value, clapack_option<
             UpLo >::value, n, nrhs, a, lda, b, ldb );
 }
@@ -70,8 +70,8 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t posv( Order, UpLo, const int n, const int nrhs,
-        double* a, const int lda, double* b, const int ldb ) {
+inline std::ptrdiff_t posv( Order, const UpLo uplo, const int n,
+        const int nrhs, double* a, const int lda, double* b, const int ldb ) {
     return clapack_dposv( clapack_option< Order >::value, clapack_option<
             UpLo >::value, n, nrhs, a, lda, b, ldb );
 }
@@ -82,9 +82,9 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t posv( Order, UpLo, const int n, const int nrhs,
-        std::complex<float>* a, const int lda, std::complex<float>* b,
-        const int ldb ) {
+inline std::ptrdiff_t posv( Order, const UpLo uplo, const int n,
+        const int nrhs, std::complex<float>* a, const int lda,
+        std::complex<float>* b, const int ldb ) {
     return clapack_cposv( clapack_option< Order >::value, clapack_option<
             UpLo >::value, n, nrhs, a, lda, b, ldb );
 }
@@ -95,9 +95,9 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t posv( Order, UpLo, const int n, const int nrhs,
-        std::complex<double>* a, const int lda, std::complex<double>* b,
-        const int ldb ) {
+inline std::ptrdiff_t posv( Order, const UpLo uplo, const int n,
+        const int nrhs, std::complex<double>* a, const int lda,
+        std::complex<double>* b, const int ldb ) {
     return clapack_zposv( clapack_option< Order >::value, clapack_option<
             UpLo >::value, n, nrhs, a, lda, b, ldb );
 }
@@ -109,7 +109,7 @@
 // * float value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t posv( Order, UpLo, const fortran_int_t n,
+inline std::ptrdiff_t posv( Order, const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, float* a, const fortran_int_t lda, float* b,
         const fortran_int_t ldb ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
@@ -125,7 +125,7 @@
 // * double value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t posv( Order, UpLo, const fortran_int_t n,
+inline std::ptrdiff_t posv( Order, const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, double* a, const fortran_int_t lda,
         double* b, const fortran_int_t ldb ) {
     BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );
@@ -141,7 +141,7 @@
 // * complex<float> value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t posv( Order, UpLo, const fortran_int_t n,
+inline std::ptrdiff_t posv( Order, const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, std::complex<float>* a,
         const fortran_int_t lda, std::complex<float>* b,
         const fortran_int_t ldb ) {
@@ -158,7 +158,7 @@
 // * complex<double> value-type.
 //
 template< typename Order, typename UpLo >
-inline std::ptrdiff_t posv( Order, UpLo, const fortran_int_t n,
+inline std::ptrdiff_t posv( Order, const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, std::complex<double>* a,
         const fortran_int_t lda, std::complex<double>* b,
         const fortran_int_t ldb ) {
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/posvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/posvx.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/posvx.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -54,12 +54,12 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t posvx( const char fact, UpLo, const fortran_int_t n,
-        const fortran_int_t nrhs, float* a, const fortran_int_t lda,
-        float* af, const fortran_int_t ldaf, char& equed, float* s, float* b,
-        const fortran_int_t ldb, float* x, const fortran_int_t ldx,
-        float& rcond, float* ferr, float* berr, float* work,
-        fortran_int_t* iwork ) {
+inline std::ptrdiff_t posvx( const char fact, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t nrhs, float* a,
+        const fortran_int_t lda, float* af, const fortran_int_t ldaf,
+        char& equed, float* s, float* b, const fortran_int_t ldb, float* x,
+        const fortran_int_t ldx, float& rcond, float* ferr, float* berr,
+        float* work, fortran_int_t* iwork ) {
     fortran_int_t info(0);
     LAPACK_SPOSVX( &fact, &lapack_option< UpLo >::value, &n, &nrhs, a, &lda,
             af, &ldaf, &equed, s, b, &ldb, x, &ldx, &rcond, ferr, berr, work,
@@ -73,10 +73,10 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t posvx( const char fact, UpLo, const fortran_int_t n,
-        const fortran_int_t nrhs, double* a, const fortran_int_t lda,
-        double* af, const fortran_int_t ldaf, char& equed, double* s,
-        double* b, const fortran_int_t ldb, double* x,
+inline std::ptrdiff_t posvx( const char fact, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t nrhs, double* a,
+        const fortran_int_t lda, double* af, const fortran_int_t ldaf,
+        char& equed, double* s, double* b, const fortran_int_t ldb, double* x,
         const fortran_int_t ldx, double& rcond, double* ferr, double* berr,
         double* work, fortran_int_t* iwork ) {
     fortran_int_t info(0);
@@ -92,11 +92,11 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t posvx( const char fact, UpLo, const fortran_int_t n,
-        const fortran_int_t nrhs, std::complex<float>* a,
-        const fortran_int_t lda, std::complex<float>* af,
-        const fortran_int_t ldaf, char& equed, float* s,
-        std::complex<float>* b, const fortran_int_t ldb,
+inline std::ptrdiff_t posvx( const char fact, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t nrhs,
+        std::complex<float>* a, const fortran_int_t lda,
+        std::complex<float>* af, const fortran_int_t ldaf, char& equed,
+        float* s, std::complex<float>* b, const fortran_int_t ldb,
         std::complex<float>* x, const fortran_int_t ldx, float& rcond,
         float* ferr, float* berr, std::complex<float>* work, float* rwork ) {
     fortran_int_t info(0);
@@ -112,11 +112,11 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t posvx( const char fact, UpLo, const fortran_int_t n,
-        const fortran_int_t nrhs, std::complex<double>* a,
-        const fortran_int_t lda, std::complex<double>* af,
-        const fortran_int_t ldaf, char& equed, double* s,
-        std::complex<double>* b, const fortran_int_t ldb,
+inline std::ptrdiff_t posvx( const char fact, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t nrhs,
+        std::complex<double>* a, const fortran_int_t lda,
+        std::complex<double>* af, const fortran_int_t ldaf, char& equed,
+        double* s, std::complex<double>* b, const fortran_int_t ldb,
         std::complex<double>* x, const fortran_int_t ldx, double& rcond,
         double* ferr, double* berr, std::complex<double>* work,
         double* rwork ) {
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ppsv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ppsv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ppsv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -49,7 +49,7 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t ppsv( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t ppsv( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, float* ap, float* b,
         const fortran_int_t ldb ) {
     fortran_int_t info(0);
@@ -64,7 +64,7 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t ppsv( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t ppsv( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, double* ap, double* b,
         const fortran_int_t ldb ) {
     fortran_int_t info(0);
@@ -79,7 +79,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t ppsv( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t ppsv( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, std::complex<float>* ap,
         std::complex<float>* b, const fortran_int_t ldb ) {
     fortran_int_t info(0);
@@ -94,7 +94,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t ppsv( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t ppsv( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, std::complex<double>* ap,
         std::complex<double>* b, const fortran_int_t ldb ) {
     fortran_int_t info(0);
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ppsvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ppsvx.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/ppsvx.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -54,11 +54,11 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t ppsvx( const char fact, UpLo, const fortran_int_t n,
-        const fortran_int_t nrhs, float* ap, float* afp, char& equed,
-        float* s, float* b, const fortran_int_t ldb, float* x,
-        const fortran_int_t ldx, float& rcond, float* ferr, float* berr,
-        float* work, fortran_int_t* iwork ) {
+inline std::ptrdiff_t ppsvx( const char fact, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t nrhs, float* ap,
+        float* afp, char& equed, float* s, float* b, const fortran_int_t ldb,
+        float* x, const fortran_int_t ldx, float& rcond, float* ferr,
+        float* berr, float* work, fortran_int_t* iwork ) {
     fortran_int_t info(0);
     LAPACK_SPPSVX( &fact, &lapack_option< UpLo >::value, &n, &nrhs, ap, afp,
             &equed, s, b, &ldb, x, &ldx, &rcond, ferr, berr, work, iwork,
@@ -72,11 +72,12 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t ppsvx( const char fact, UpLo, const fortran_int_t n,
-        const fortran_int_t nrhs, double* ap, double* afp, char& equed,
-        double* s, double* b, const fortran_int_t ldb, double* x,
-        const fortran_int_t ldx, double& rcond, double* ferr, double* berr,
-        double* work, fortran_int_t* iwork ) {
+inline std::ptrdiff_t ppsvx( const char fact, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t nrhs, double* ap,
+        double* afp, char& equed, double* s, double* b,
+        const fortran_int_t ldb, double* x, const fortran_int_t ldx,
+        double& rcond, double* ferr, double* berr, double* work,
+        fortran_int_t* iwork ) {
     fortran_int_t info(0);
     LAPACK_DPPSVX( &fact, &lapack_option< UpLo >::value, &n, &nrhs, ap, afp,
             &equed, s, b, &ldb, x, &ldx, &rcond, ferr, berr, work, iwork,
@@ -90,10 +91,10 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t ppsvx( const char fact, UpLo, const fortran_int_t n,
-        const fortran_int_t nrhs, std::complex<float>* ap,
-        std::complex<float>* afp, char& equed, float* s,
-        std::complex<float>* b, const fortran_int_t ldb,
+inline std::ptrdiff_t ppsvx( const char fact, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t nrhs,
+        std::complex<float>* ap, std::complex<float>* afp, char& equed,
+        float* s, std::complex<float>* b, const fortran_int_t ldb,
         std::complex<float>* x, const fortran_int_t ldx, float& rcond,
         float* ferr, float* berr, std::complex<float>* work, float* rwork ) {
     fortran_int_t info(0);
@@ -109,10 +110,10 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t ppsvx( const char fact, UpLo, const fortran_int_t n,
-        const fortran_int_t nrhs, std::complex<double>* ap,
-        std::complex<double>* afp, char& equed, double* s,
-        std::complex<double>* b, const fortran_int_t ldb,
+inline std::ptrdiff_t ppsvx( const char fact, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t nrhs,
+        std::complex<double>* ap, std::complex<double>* afp, char& equed,
+        double* s, std::complex<double>* b, const fortran_int_t ldb,
         std::complex<double>* x, const fortran_int_t ldx, double& rcond,
         double* ferr, double* berr, std::complex<double>* work,
         double* rwork ) {
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbev.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbev.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbev.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,9 +52,10 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sbev( const char jobz, UpLo, const fortran_int_t n,
-        const fortran_int_t kd, float* ab, const fortran_int_t ldab, float* w,
-        float* z, const fortran_int_t ldz, float* work ) {
+inline std::ptrdiff_t sbev( const char jobz, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t kd, float* ab,
+        const fortran_int_t ldab, float* w, float* z, const fortran_int_t ldz,
+        float* work ) {
     fortran_int_t info(0);
     LAPACK_SSBEV( &jobz, &lapack_option< UpLo >::value, &n, &kd, ab, &ldab, w,
             z, &ldz, work, &info );
@@ -67,9 +68,10 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sbev( const char jobz, UpLo, const fortran_int_t n,
-        const fortran_int_t kd, double* ab, const fortran_int_t ldab,
-        double* w, double* z, const fortran_int_t ldz, double* work ) {
+inline std::ptrdiff_t sbev( const char jobz, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t kd, double* ab,
+        const fortran_int_t ldab, double* w, double* z,
+        const fortran_int_t ldz, double* work ) {
     fortran_int_t info(0);
     LAPACK_DSBEV( &jobz, &lapack_option< UpLo >::value, &n, &kd, ab, &ldab, w,
             z, &ldz, work, &info );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbevd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbevd.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbevd.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -53,10 +53,10 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sbevd( const char jobz, UpLo, const fortran_int_t n,
-        const fortran_int_t kd, float* ab, const fortran_int_t ldab, float* w,
-        float* z, const fortran_int_t ldz, float* work,
-        const fortran_int_t lwork, fortran_int_t* iwork,
+inline std::ptrdiff_t sbevd( const char jobz, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t kd, float* ab,
+        const fortran_int_t ldab, float* w, float* z, const fortran_int_t ldz,
+        float* work, const fortran_int_t lwork, fortran_int_t* iwork,
         const fortran_int_t liwork ) {
     fortran_int_t info(0);
     LAPACK_SSBEVD( &jobz, &lapack_option< UpLo >::value, &n, &kd, ab, &ldab,
@@ -70,11 +70,11 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sbevd( const char jobz, UpLo, const fortran_int_t n,
-        const fortran_int_t kd, double* ab, const fortran_int_t ldab,
-        double* w, double* z, const fortran_int_t ldz, double* work,
-        const fortran_int_t lwork, fortran_int_t* iwork,
-        const fortran_int_t liwork ) {
+inline std::ptrdiff_t sbevd( const char jobz, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t kd, double* ab,
+        const fortran_int_t ldab, double* w, double* z,
+        const fortran_int_t ldz, double* work, const fortran_int_t lwork,
+        fortran_int_t* iwork, const fortran_int_t liwork ) {
     fortran_int_t info(0);
     LAPACK_DSBEVD( &jobz, &lapack_option< UpLo >::value, &n, &kd, ab, &ldab,
             w, z, &ldz, work, &lwork, iwork, &liwork, &info );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbevx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbevx.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbevx.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,13 +52,13 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sbevx( const char jobz, const char range, UpLo,
-        const fortran_int_t n, const fortran_int_t kd, float* ab,
-        const fortran_int_t ldab, float* q, const fortran_int_t ldq,
-        const float vl, const float vu, const fortran_int_t il,
-        const fortran_int_t iu, const float abstol, fortran_int_t& m,
-        float* w, float* z, const fortran_int_t ldz, float* work,
-        fortran_int_t* iwork, fortran_int_t* ifail ) {
+inline std::ptrdiff_t sbevx( const char jobz, const char range,
+        const UpLo uplo, const fortran_int_t n, const fortran_int_t kd,
+        float* ab, const fortran_int_t ldab, float* q,
+        const fortran_int_t ldq, const float vl, const float vu,
+        const fortran_int_t il, const fortran_int_t iu, const float abstol,
+        fortran_int_t& m, float* w, float* z, const fortran_int_t ldz,
+        float* work, fortran_int_t* iwork, fortran_int_t* ifail ) {
     fortran_int_t info(0);
     LAPACK_SSBEVX( &jobz, &range, &lapack_option< UpLo >::value, &n, &kd, ab,
             &ldab, q, &ldq, &vl, &vu, &il, &iu, &abstol, &m, w, z, &ldz, work,
@@ -72,13 +72,13 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sbevx( const char jobz, const char range, UpLo,
-        const fortran_int_t n, const fortran_int_t kd, double* ab,
-        const fortran_int_t ldab, double* q, const fortran_int_t ldq,
-        const double vl, const double vu, const fortran_int_t il,
-        const fortran_int_t iu, const double abstol, fortran_int_t& m,
-        double* w, double* z, const fortran_int_t ldz, double* work,
-        fortran_int_t* iwork, fortran_int_t* ifail ) {
+inline std::ptrdiff_t sbevx( const char jobz, const char range,
+        const UpLo uplo, const fortran_int_t n, const fortran_int_t kd,
+        double* ab, const fortran_int_t ldab, double* q,
+        const fortran_int_t ldq, const double vl, const double vu,
+        const fortran_int_t il, const fortran_int_t iu, const double abstol,
+        fortran_int_t& m, double* w, double* z, const fortran_int_t ldz,
+        double* work, fortran_int_t* iwork, fortran_int_t* ifail ) {
     fortran_int_t info(0);
     LAPACK_DSBEVX( &jobz, &range, &lapack_option< UpLo >::value, &n, &kd, ab,
             &ldab, q, &ldq, &vl, &vu, &il, &iu, &abstol, &m, w, z, &ldz, work,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbgv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbgv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbgv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,10 +52,11 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sbgv( const char jobz, UpLo, const fortran_int_t n,
-        const fortran_int_t ka, const fortran_int_t kb, float* ab,
-        const fortran_int_t ldab, float* bb, const fortran_int_t ldbb,
-        float* w, float* z, const fortran_int_t ldz, float* work ) {
+inline std::ptrdiff_t sbgv( const char jobz, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t ka, const fortran_int_t kb,
+        float* ab, const fortran_int_t ldab, float* bb,
+        const fortran_int_t ldbb, float* w, float* z, const fortran_int_t ldz,
+        float* work ) {
     fortran_int_t info(0);
     LAPACK_SSBGV( &jobz, &lapack_option< UpLo >::value, &n, &ka, &kb, ab,
             &ldab, bb, &ldbb, w, z, &ldz, work, &info );
@@ -68,10 +69,11 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sbgv( const char jobz, UpLo, const fortran_int_t n,
-        const fortran_int_t ka, const fortran_int_t kb, double* ab,
-        const fortran_int_t ldab, double* bb, const fortran_int_t ldbb,
-        double* w, double* z, const fortran_int_t ldz, double* work ) {
+inline std::ptrdiff_t sbgv( const char jobz, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t ka, const fortran_int_t kb,
+        double* ab, const fortran_int_t ldab, double* bb,
+        const fortran_int_t ldbb, double* w, double* z,
+        const fortran_int_t ldz, double* work ) {
     fortran_int_t info(0);
     LAPACK_DSBGV( &jobz, &lapack_option< UpLo >::value, &n, &ka, &kb, ab,
             &ldab, bb, &ldbb, w, z, &ldz, work, &info );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbgvd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbgvd.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbgvd.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -53,11 +53,11 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sbgvd( const char jobz, UpLo, const fortran_int_t n,
-        const fortran_int_t ka, const fortran_int_t kb, float* ab,
-        const fortran_int_t ldab, float* bb, const fortran_int_t ldbb,
-        float* w, float* z, const fortran_int_t ldz, float* work,
-        const fortran_int_t lwork, fortran_int_t* iwork,
+inline std::ptrdiff_t sbgvd( const char jobz, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t ka, const fortran_int_t kb,
+        float* ab, const fortran_int_t ldab, float* bb,
+        const fortran_int_t ldbb, float* w, float* z, const fortran_int_t ldz,
+        float* work, const fortran_int_t lwork, fortran_int_t* iwork,
         const fortran_int_t liwork ) {
     fortran_int_t info(0);
     LAPACK_SSBGVD( &jobz, &lapack_option< UpLo >::value, &n, &ka, &kb, ab,
@@ -72,12 +72,12 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sbgvd( const char jobz, UpLo, const fortran_int_t n,
-        const fortran_int_t ka, const fortran_int_t kb, double* ab,
-        const fortran_int_t ldab, double* bb, const fortran_int_t ldbb,
-        double* w, double* z, const fortran_int_t ldz, double* work,
-        const fortran_int_t lwork, fortran_int_t* iwork,
-        const fortran_int_t liwork ) {
+inline std::ptrdiff_t sbgvd( const char jobz, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t ka, const fortran_int_t kb,
+        double* ab, const fortran_int_t ldab, double* bb,
+        const fortran_int_t ldbb, double* w, double* z,
+        const fortran_int_t ldz, double* work, const fortran_int_t lwork,
+        fortran_int_t* iwork, const fortran_int_t liwork ) {
     fortran_int_t info(0);
     LAPACK_DSBGVD( &jobz, &lapack_option< UpLo >::value, &n, &ka, &kb, ab,
             &ldab, bb, &ldbb, w, z, &ldz, work, &lwork, iwork, &liwork,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbgvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbgvx.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sbgvx.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,14 +52,14 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sbgvx( const char jobz, const char range, UpLo,
-        const fortran_int_t n, const fortran_int_t ka, const fortran_int_t kb,
-        float* ab, const fortran_int_t ldab, float* bb,
-        const fortran_int_t ldbb, float* q, const fortran_int_t ldq,
-        const float vl, const float vu, const fortran_int_t il,
-        const fortran_int_t iu, const float abstol, fortran_int_t& m,
-        float* w, float* z, const fortran_int_t ldz, float* work,
-        fortran_int_t* iwork, fortran_int_t* ifail ) {
+inline std::ptrdiff_t sbgvx( const char jobz, const char range,
+        const UpLo uplo, const fortran_int_t n, const fortran_int_t ka,
+        const fortran_int_t kb, float* ab, const fortran_int_t ldab,
+        float* bb, const fortran_int_t ldbb, float* q,
+        const fortran_int_t ldq, const float vl, const float vu,
+        const fortran_int_t il, const fortran_int_t iu, const float abstol,
+        fortran_int_t& m, float* w, float* z, const fortran_int_t ldz,
+        float* work, fortran_int_t* iwork, fortran_int_t* ifail ) {
     fortran_int_t info(0);
     LAPACK_SSBGVX( &jobz, &range, &lapack_option< UpLo >::value, &n, &ka, &kb,
             ab, &ldab, bb, &ldbb, q, &ldq, &vl, &vu, &il, &iu, &abstol, &m, w,
@@ -73,14 +73,14 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sbgvx( const char jobz, const char range, UpLo,
-        const fortran_int_t n, const fortran_int_t ka, const fortran_int_t kb,
-        double* ab, const fortran_int_t ldab, double* bb,
-        const fortran_int_t ldbb, double* q, const fortran_int_t ldq,
-        const double vl, const double vu, const fortran_int_t il,
-        const fortran_int_t iu, const double abstol, fortran_int_t& m,
-        double* w, double* z, const fortran_int_t ldz, double* work,
-        fortran_int_t* iwork, fortran_int_t* ifail ) {
+inline std::ptrdiff_t sbgvx( const char jobz, const char range,
+        const UpLo uplo, const fortran_int_t n, const fortran_int_t ka,
+        const fortran_int_t kb, double* ab, const fortran_int_t ldab,
+        double* bb, const fortran_int_t ldbb, double* q,
+        const fortran_int_t ldq, const double vl, const double vu,
+        const fortran_int_t il, const fortran_int_t iu, const double abstol,
+        fortran_int_t& m, double* w, double* z, const fortran_int_t ldz,
+        double* work, fortran_int_t* iwork, fortran_int_t* ifail ) {
     fortran_int_t info(0);
     LAPACK_DSBGVX( &jobz, &range, &lapack_option< UpLo >::value, &n, &ka, &kb,
             ab, &ldab, bb, &ldbb, q, &ldq, &vl, &vu, &il, &iu, &abstol, &m, w,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sgesv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sgesv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sgesv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -163,8 +163,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 
     //
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spev.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spev.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spev.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -51,8 +51,9 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t spev( const char jobz, UpLo, const fortran_int_t n,
-        float* ap, float* w, float* z, const fortran_int_t ldz, float* work ) {
+inline std::ptrdiff_t spev( const char jobz, const UpLo uplo,
+        const fortran_int_t n, float* ap, float* w, float* z,
+        const fortran_int_t ldz, float* work ) {
     fortran_int_t info(0);
     LAPACK_SSPEV( &jobz, &lapack_option< UpLo >::value, &n, ap, w, z, &ldz,
             work, &info );
@@ -65,9 +66,9 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t spev( const char jobz, UpLo, const fortran_int_t n,
-        double* ap, double* w, double* z, const fortran_int_t ldz,
-        double* work ) {
+inline std::ptrdiff_t spev( const char jobz, const UpLo uplo,
+        const fortran_int_t n, double* ap, double* w, double* z,
+        const fortran_int_t ldz, double* work ) {
     fortran_int_t info(0);
     LAPACK_DSPEV( &jobz, &lapack_option< UpLo >::value, &n, ap, w, z, &ldz,
             work, &info );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spevd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spevd.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spevd.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,10 +52,10 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t spevd( const char jobz, UpLo, const fortran_int_t n,
-        float* ap, float* w, float* z, const fortran_int_t ldz, float* work,
-        const fortran_int_t lwork, fortran_int_t* iwork,
-        const fortran_int_t liwork ) {
+inline std::ptrdiff_t spevd( const char jobz, const UpLo uplo,
+        const fortran_int_t n, float* ap, float* w, float* z,
+        const fortran_int_t ldz, float* work, const fortran_int_t lwork,
+        fortran_int_t* iwork, const fortran_int_t liwork ) {
     fortran_int_t info(0);
     LAPACK_SSPEVD( &jobz, &lapack_option< UpLo >::value, &n, ap, w, z, &ldz,
             work, &lwork, iwork, &liwork, &info );
@@ -68,10 +68,10 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t spevd( const char jobz, UpLo, const fortran_int_t n,
-        double* ap, double* w, double* z, const fortran_int_t ldz,
-        double* work, const fortran_int_t lwork, fortran_int_t* iwork,
-        const fortran_int_t liwork ) {
+inline std::ptrdiff_t spevd( const char jobz, const UpLo uplo,
+        const fortran_int_t n, double* ap, double* w, double* z,
+        const fortran_int_t ldz, double* work, const fortran_int_t lwork,
+        fortran_int_t* iwork, const fortran_int_t liwork ) {
     fortran_int_t info(0);
     LAPACK_DSPEVD( &jobz, &lapack_option< UpLo >::value, &n, ap, w, z, &ldz,
             work, &lwork, iwork, &liwork, &info );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spevx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spevx.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spevx.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -51,11 +51,12 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t spevx( const char jobz, const char range, UpLo,
-        const fortran_int_t n, float* ap, const float vl, const float vu,
-        const fortran_int_t il, const fortran_int_t iu, const float abstol,
-        fortran_int_t& m, float* w, float* z, const fortran_int_t ldz,
-        float* work, fortran_int_t* iwork, fortran_int_t* ifail ) {
+inline std::ptrdiff_t spevx( const char jobz, const char range,
+        const UpLo uplo, const fortran_int_t n, float* ap, const float vl,
+        const float vu, const fortran_int_t il, const fortran_int_t iu,
+        const float abstol, fortran_int_t& m, float* w, float* z,
+        const fortran_int_t ldz, float* work, fortran_int_t* iwork,
+        fortran_int_t* ifail ) {
     fortran_int_t info(0);
     LAPACK_SSPEVX( &jobz, &range, &lapack_option< UpLo >::value, &n, ap, &vl,
             &vu, &il, &iu, &abstol, &m, w, z, &ldz, work, iwork, ifail,
@@ -69,11 +70,12 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t spevx( const char jobz, const char range, UpLo,
-        const fortran_int_t n, double* ap, const double vl, const double vu,
-        const fortran_int_t il, const fortran_int_t iu, const double abstol,
-        fortran_int_t& m, double* w, double* z, const fortran_int_t ldz,
-        double* work, fortran_int_t* iwork, fortran_int_t* ifail ) {
+inline std::ptrdiff_t spevx( const char jobz, const char range,
+        const UpLo uplo, const fortran_int_t n, double* ap, const double vl,
+        const double vu, const fortran_int_t il, const fortran_int_t iu,
+        const double abstol, fortran_int_t& m, double* w, double* z,
+        const fortran_int_t ldz, double* work, fortran_int_t* iwork,
+        fortran_int_t* ifail ) {
     fortran_int_t info(0);
     LAPACK_DSPEVX( &jobz, &range, &lapack_option< UpLo >::value, &n, ap, &vl,
             &vu, &il, &iu, &abstol, &m, w, z, &ldz, work, iwork, ifail,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spgv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spgv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spgv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -51,9 +51,9 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t spgv( const fortran_int_t itype, const char jobz, UpLo,
-        const fortran_int_t n, float* ap, float* bp, float* w, float* z,
-        const fortran_int_t ldz, float* work ) {
+inline std::ptrdiff_t spgv( const fortran_int_t itype, const char jobz,
+        const UpLo uplo, const fortran_int_t n, float* ap, float* bp,
+        float* w, float* z, const fortran_int_t ldz, float* work ) {
     fortran_int_t info(0);
     LAPACK_SSPGV( &itype, &jobz, &lapack_option< UpLo >::value, &n, ap, bp, w,
             z, &ldz, work, &info );
@@ -66,9 +66,9 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t spgv( const fortran_int_t itype, const char jobz, UpLo,
-        const fortran_int_t n, double* ap, double* bp, double* w, double* z,
-        const fortran_int_t ldz, double* work ) {
+inline std::ptrdiff_t spgv( const fortran_int_t itype, const char jobz,
+        const UpLo uplo, const fortran_int_t n, double* ap, double* bp,
+        double* w, double* z, const fortran_int_t ldz, double* work ) {
     fortran_int_t info(0);
     LAPACK_DSPGV( &itype, &jobz, &lapack_option< UpLo >::value, &n, ap, bp, w,
             z, &ldz, work, &info );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spgvd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spgvd.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spgvd.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,10 +52,11 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t spgvd( const fortran_int_t itype, const char jobz, UpLo,
-        const fortran_int_t n, float* ap, float* bp, float* w, float* z,
-        const fortran_int_t ldz, float* work, const fortran_int_t lwork,
-        fortran_int_t* iwork, const fortran_int_t liwork ) {
+inline std::ptrdiff_t spgvd( const fortran_int_t itype, const char jobz,
+        const UpLo uplo, const fortran_int_t n, float* ap, float* bp,
+        float* w, float* z, const fortran_int_t ldz, float* work,
+        const fortran_int_t lwork, fortran_int_t* iwork,
+        const fortran_int_t liwork ) {
     fortran_int_t info(0);
     LAPACK_SSPGVD( &itype, &jobz, &lapack_option< UpLo >::value, &n, ap, bp,
             w, z, &ldz, work, &lwork, iwork, &liwork, &info );
@@ -68,10 +69,11 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t spgvd( const fortran_int_t itype, const char jobz, UpLo,
-        const fortran_int_t n, double* ap, double* bp, double* w, double* z,
-        const fortran_int_t ldz, double* work, const fortran_int_t lwork,
-        fortran_int_t* iwork, const fortran_int_t liwork ) {
+inline std::ptrdiff_t spgvd( const fortran_int_t itype, const char jobz,
+        const UpLo uplo, const fortran_int_t n, double* ap, double* bp,
+        double* w, double* z, const fortran_int_t ldz, double* work,
+        const fortran_int_t lwork, fortran_int_t* iwork,
+        const fortran_int_t liwork ) {
     fortran_int_t info(0);
     LAPACK_DSPGVD( &itype, &jobz, &lapack_option< UpLo >::value, &n, ap, bp,
             w, z, &ldz, work, &lwork, iwork, &liwork, &info );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spgvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spgvx.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spgvx.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,8 +52,8 @@
 //
 template< typename UpLo >
 inline std::ptrdiff_t spgvx( const fortran_int_t itype, const char jobz,
-        const char range, UpLo, const fortran_int_t n, float* ap, float* bp,
-        const float vl, const float vu, const fortran_int_t il,
+        const char range, const UpLo uplo, const fortran_int_t n, float* ap,
+        float* bp, const float vl, const float vu, const fortran_int_t il,
         const fortran_int_t iu, const float abstol, fortran_int_t& m,
         float* w, float* z, const fortran_int_t ldz, float* work,
         fortran_int_t* iwork, fortran_int_t* ifail ) {
@@ -71,8 +71,8 @@
 //
 template< typename UpLo >
 inline std::ptrdiff_t spgvx( const fortran_int_t itype, const char jobz,
-        const char range, UpLo, const fortran_int_t n, double* ap, double* bp,
-        const double vl, const double vu, const fortran_int_t il,
+        const char range, const UpLo uplo, const fortran_int_t n, double* ap,
+        double* bp, const double vl, const double vu, const fortran_int_t il,
         const fortran_int_t iu, const double abstol, fortran_int_t& m,
         double* w, double* z, const fortran_int_t ldz, double* work,
         fortran_int_t* iwork, fortran_int_t* ifail ) {
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sposv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sposv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sposv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -51,7 +51,7 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sposv( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t sposv( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, double* a, const fortran_int_t lda,
         const double* b, const fortran_int_t ldb, double* x,
         const fortran_int_t ldx, double* work, float* swork,
@@ -160,8 +160,9 @@
     // Static member function that returns the minimum size of
     // workspace-array work.
     //
+    template< $TYPES >
     static std::ptrdiff_t min_size_work( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 
     //
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spsv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spsv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spsv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -49,7 +49,7 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t spsv( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t spsv( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, float* ap, fortran_int_t* ipiv, float* b,
         const fortran_int_t ldb ) {
     fortran_int_t info(0);
@@ -64,7 +64,7 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t spsv( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t spsv( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, double* ap, fortran_int_t* ipiv, double* b,
         const fortran_int_t ldb ) {
     fortran_int_t info(0);
@@ -79,7 +79,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t spsv( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t spsv( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, std::complex<float>* ap,
         fortran_int_t* ipiv, std::complex<float>* b,
         const fortran_int_t ldb ) {
@@ -95,7 +95,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t spsv( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t spsv( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, std::complex<double>* ap,
         fortran_int_t* ipiv, std::complex<double>* b,
         const fortran_int_t ldb ) {
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spsvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spsvx.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/spsvx.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -54,11 +54,12 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t spsvx( const char fact, UpLo, const fortran_int_t n,
-        const fortran_int_t nrhs, const float* ap, float* afp,
-        fortran_int_t* ipiv, const float* b, const fortran_int_t ldb,
-        float* x, const fortran_int_t ldx, float& rcond, float* ferr,
-        float* berr, float* work, fortran_int_t* iwork ) {
+inline std::ptrdiff_t spsvx( const char fact, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t nrhs, const float* ap,
+        float* afp, fortran_int_t* ipiv, const float* b,
+        const fortran_int_t ldb, float* x, const fortran_int_t ldx,
+        float& rcond, float* ferr, float* berr, float* work,
+        fortran_int_t* iwork ) {
     fortran_int_t info(0);
     LAPACK_SSPSVX( &fact, &lapack_option< UpLo >::value, &n, &nrhs, ap, afp,
             ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr, work, iwork, &info );
@@ -71,11 +72,12 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t spsvx( const char fact, UpLo, const fortran_int_t n,
-        const fortran_int_t nrhs, const double* ap, double* afp,
-        fortran_int_t* ipiv, const double* b, const fortran_int_t ldb,
-        double* x, const fortran_int_t ldx, double& rcond, double* ferr,
-        double* berr, double* work, fortran_int_t* iwork ) {
+inline std::ptrdiff_t spsvx( const char fact, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t nrhs, const double* ap,
+        double* afp, fortran_int_t* ipiv, const double* b,
+        const fortran_int_t ldb, double* x, const fortran_int_t ldx,
+        double& rcond, double* ferr, double* berr, double* work,
+        fortran_int_t* iwork ) {
     fortran_int_t info(0);
     LAPACK_DSPSVX( &fact, &lapack_option< UpLo >::value, &n, &nrhs, ap, afp,
             ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr, work, iwork, &info );
@@ -88,12 +90,13 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t spsvx( const char fact, UpLo, const fortran_int_t n,
-        const fortran_int_t nrhs, const std::complex<float>* ap,
-        std::complex<float>* afp, fortran_int_t* ipiv,
-        const std::complex<float>* b, const fortran_int_t ldb,
-        std::complex<float>* x, const fortran_int_t ldx, float& rcond,
-        float* ferr, float* berr, std::complex<float>* work, float* rwork ) {
+inline std::ptrdiff_t spsvx( const char fact, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t nrhs,
+        const std::complex<float>* ap, std::complex<float>* afp,
+        fortran_int_t* ipiv, const std::complex<float>* b,
+        const fortran_int_t ldb, std::complex<float>* x,
+        const fortran_int_t ldx, float& rcond, float* ferr, float* berr,
+        std::complex<float>* work, float* rwork ) {
     fortran_int_t info(0);
     LAPACK_CSPSVX( &fact, &lapack_option< UpLo >::value, &n, &nrhs, ap, afp,
             ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr, work, rwork, &info );
@@ -106,13 +109,13 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t spsvx( const char fact, UpLo, const fortran_int_t n,
-        const fortran_int_t nrhs, const std::complex<double>* ap,
-        std::complex<double>* afp, fortran_int_t* ipiv,
-        const std::complex<double>* b, const fortran_int_t ldb,
-        std::complex<double>* x, const fortran_int_t ldx, double& rcond,
-        double* ferr, double* berr, std::complex<double>* work,
-        double* rwork ) {
+inline std::ptrdiff_t spsvx( const char fact, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t nrhs,
+        const std::complex<double>* ap, std::complex<double>* afp,
+        fortran_int_t* ipiv, const std::complex<double>* b,
+        const fortran_int_t ldb, std::complex<double>* x,
+        const fortran_int_t ldx, double& rcond, double* ferr, double* berr,
+        std::complex<double>* work, double* rwork ) {
     fortran_int_t info(0);
     LAPACK_ZSPSVX( &fact, &lapack_option< UpLo >::value, &n, &nrhs, ap, afp,
             ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr, work, rwork, &info );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syev.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syev.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syev.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,9 +52,9 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t syev( const char jobz, UpLo, const fortran_int_t n,
-        float* a, const fortran_int_t lda, float* w, float* work,
-        const fortran_int_t lwork ) {
+inline std::ptrdiff_t syev( const char jobz, const UpLo uplo,
+        const fortran_int_t n, float* a, const fortran_int_t lda, float* w,
+        float* work, const fortran_int_t lwork ) {
     fortran_int_t info(0);
     LAPACK_SSYEV( &jobz, &lapack_option< UpLo >::value, &n, a, &lda, w, work,
             &lwork, &info );
@@ -67,9 +67,9 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t syev( const char jobz, UpLo, const fortran_int_t n,
-        double* a, const fortran_int_t lda, double* w, double* work,
-        const fortran_int_t lwork ) {
+inline std::ptrdiff_t syev( const char jobz, const UpLo uplo,
+        const fortran_int_t n, double* a, const fortran_int_t lda, double* w,
+        double* work, const fortran_int_t lwork ) {
     fortran_int_t info(0);
     LAPACK_DSYEV( &jobz, &lapack_option< UpLo >::value, &n, a, &lda, w, work,
             &lwork, &info );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syevd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syevd.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syevd.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,9 +52,9 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t syevd( const char jobz, UpLo, const fortran_int_t n,
-        float* a, const fortran_int_t lda, float* w, float* work,
-        const fortran_int_t lwork, fortran_int_t* iwork,
+inline std::ptrdiff_t syevd( const char jobz, const UpLo uplo,
+        const fortran_int_t n, float* a, const fortran_int_t lda, float* w,
+        float* work, const fortran_int_t lwork, fortran_int_t* iwork,
         const fortran_int_t liwork ) {
     fortran_int_t info(0);
     LAPACK_SSYEVD( &jobz, &lapack_option< UpLo >::value, &n, a, &lda, w, work,
@@ -68,9 +68,9 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t syevd( const char jobz, UpLo, const fortran_int_t n,
-        double* a, const fortran_int_t lda, double* w, double* work,
-        const fortran_int_t lwork, fortran_int_t* iwork,
+inline std::ptrdiff_t syevd( const char jobz, const UpLo uplo,
+        const fortran_int_t n, double* a, const fortran_int_t lda, double* w,
+        double* work, const fortran_int_t lwork, fortran_int_t* iwork,
         const fortran_int_t liwork ) {
     fortran_int_t info(0);
     LAPACK_DSYEVD( &jobz, &lapack_option< UpLo >::value, &n, a, &lda, w, work,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syevr.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syevr.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syevr.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,13 +52,13 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t syevr( const char jobz, const char range, UpLo,
-        const fortran_int_t n, float* a, const fortran_int_t lda,
-        const float vl, const float vu, const fortran_int_t il,
-        const fortran_int_t iu, const float abstol, fortran_int_t& m,
-        float* w, float* z, const fortran_int_t ldz, fortran_int_t* isuppz,
-        float* work, const fortran_int_t lwork, fortran_int_t* iwork,
-        const fortran_int_t liwork ) {
+inline std::ptrdiff_t syevr( const char jobz, const char range,
+        const UpLo uplo, const fortran_int_t n, float* a,
+        const fortran_int_t lda, const float vl, const float vu,
+        const fortran_int_t il, const fortran_int_t iu, const float abstol,
+        fortran_int_t& m, float* w, float* z, const fortran_int_t ldz,
+        fortran_int_t* isuppz, float* work, const fortran_int_t lwork,
+        fortran_int_t* iwork, const fortran_int_t liwork ) {
     fortran_int_t info(0);
     LAPACK_SSYEVR( &jobz, &range, &lapack_option< UpLo >::value, &n, a, &lda,
             &vl, &vu, &il, &iu, &abstol, &m, w, z, &ldz, isuppz, work, &lwork,
@@ -72,13 +72,13 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t syevr( const char jobz, const char range, UpLo,
-        const fortran_int_t n, double* a, const fortran_int_t lda,
-        const double vl, const double vu, const fortran_int_t il,
-        const fortran_int_t iu, const double abstol, fortran_int_t& m,
-        double* w, double* z, const fortran_int_t ldz, fortran_int_t* isuppz,
-        double* work, const fortran_int_t lwork, fortran_int_t* iwork,
-        const fortran_int_t liwork ) {
+inline std::ptrdiff_t syevr( const char jobz, const char range,
+        const UpLo uplo, const fortran_int_t n, double* a,
+        const fortran_int_t lda, const double vl, const double vu,
+        const fortran_int_t il, const fortran_int_t iu, const double abstol,
+        fortran_int_t& m, double* w, double* z, const fortran_int_t ldz,
+        fortran_int_t* isuppz, double* work, const fortran_int_t lwork,
+        fortran_int_t* iwork, const fortran_int_t liwork ) {
     fortran_int_t info(0);
     LAPACK_DSYEVR( &jobz, &range, &lapack_option< UpLo >::value, &n, a, &lda,
             &vl, &vu, &il, &iu, &abstol, &m, w, z, &ldz, isuppz, work, &lwork,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syevx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syevx.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/syevx.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,12 +52,12 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t syevx( const char jobz, const char range, UpLo,
-        const fortran_int_t n, float* a, const fortran_int_t lda,
-        const float vl, const float vu, const fortran_int_t il,
-        const fortran_int_t iu, const float abstol, fortran_int_t& m,
-        float* w, float* z, const fortran_int_t ldz, float* work,
-        const fortran_int_t lwork, fortran_int_t* iwork,
+inline std::ptrdiff_t syevx( const char jobz, const char range,
+        const UpLo uplo, const fortran_int_t n, float* a,
+        const fortran_int_t lda, const float vl, const float vu,
+        const fortran_int_t il, const fortran_int_t iu, const float abstol,
+        fortran_int_t& m, float* w, float* z, const fortran_int_t ldz,
+        float* work, const fortran_int_t lwork, fortran_int_t* iwork,
         fortran_int_t* ifail ) {
     fortran_int_t info(0);
     LAPACK_SSYEVX( &jobz, &range, &lapack_option< UpLo >::value, &n, a, &lda,
@@ -72,12 +72,12 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t syevx( const char jobz, const char range, UpLo,
-        const fortran_int_t n, double* a, const fortran_int_t lda,
-        const double vl, const double vu, const fortran_int_t il,
-        const fortran_int_t iu, const double abstol, fortran_int_t& m,
-        double* w, double* z, const fortran_int_t ldz, double* work,
-        const fortran_int_t lwork, fortran_int_t* iwork,
+inline std::ptrdiff_t syevx( const char jobz, const char range,
+        const UpLo uplo, const fortran_int_t n, double* a,
+        const fortran_int_t lda, const double vl, const double vu,
+        const fortran_int_t il, const fortran_int_t iu, const double abstol,
+        fortran_int_t& m, double* w, double* z, const fortran_int_t ldz,
+        double* work, const fortran_int_t lwork, fortran_int_t* iwork,
         fortran_int_t* ifail ) {
     fortran_int_t info(0);
     LAPACK_DSYEVX( &jobz, &range, &lapack_option< UpLo >::value, &n, a, &lda,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sygv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sygv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sygv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,10 +52,10 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sygv( const fortran_int_t itype, const char jobz, UpLo,
-        const fortran_int_t n, float* a, const fortran_int_t lda, float* b,
-        const fortran_int_t ldb, float* w, float* work,
-        const fortran_int_t lwork ) {
+inline std::ptrdiff_t sygv( const fortran_int_t itype, const char jobz,
+        const UpLo uplo, const fortran_int_t n, float* a,
+        const fortran_int_t lda, float* b, const fortran_int_t ldb, float* w,
+        float* work, const fortran_int_t lwork ) {
     fortran_int_t info(0);
     LAPACK_SSYGV( &itype, &jobz, &lapack_option< UpLo >::value, &n, a, &lda,
             b, &ldb, w, work, &lwork, &info );
@@ -68,10 +68,10 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sygv( const fortran_int_t itype, const char jobz, UpLo,
-        const fortran_int_t n, double* a, const fortran_int_t lda, double* b,
-        const fortran_int_t ldb, double* w, double* work,
-        const fortran_int_t lwork ) {
+inline std::ptrdiff_t sygv( const fortran_int_t itype, const char jobz,
+        const UpLo uplo, const fortran_int_t n, double* a,
+        const fortran_int_t lda, double* b, const fortran_int_t ldb,
+        double* w, double* work, const fortran_int_t lwork ) {
     fortran_int_t info(0);
     LAPACK_DSYGV( &itype, &jobz, &lapack_option< UpLo >::value, &n, a, &lda,
             b, &ldb, w, work, &lwork, &info );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sygvd.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sygvd.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sygvd.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -52,10 +52,10 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sygvd( const fortran_int_t itype, const char jobz, UpLo,
-        const fortran_int_t n, float* a, const fortran_int_t lda, float* b,
-        const fortran_int_t ldb, float* w, float* work,
-        const fortran_int_t lwork, fortran_int_t* iwork,
+inline std::ptrdiff_t sygvd( const fortran_int_t itype, const char jobz,
+        const UpLo uplo, const fortran_int_t n, float* a,
+        const fortran_int_t lda, float* b, const fortran_int_t ldb, float* w,
+        float* work, const fortran_int_t lwork, fortran_int_t* iwork,
         const fortran_int_t liwork ) {
     fortran_int_t info(0);
     LAPACK_SSYGVD( &itype, &jobz, &lapack_option< UpLo >::value, &n, a, &lda,
@@ -69,11 +69,11 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sygvd( const fortran_int_t itype, const char jobz, UpLo,
-        const fortran_int_t n, double* a, const fortran_int_t lda, double* b,
-        const fortran_int_t ldb, double* w, double* work,
-        const fortran_int_t lwork, fortran_int_t* iwork,
-        const fortran_int_t liwork ) {
+inline std::ptrdiff_t sygvd( const fortran_int_t itype, const char jobz,
+        const UpLo uplo, const fortran_int_t n, double* a,
+        const fortran_int_t lda, double* b, const fortran_int_t ldb,
+        double* w, double* work, const fortran_int_t lwork,
+        fortran_int_t* iwork, const fortran_int_t liwork ) {
     fortran_int_t info(0);
     LAPACK_DSYGVD( &itype, &jobz, &lapack_option< UpLo >::value, &n, a, &lda,
             b, &ldb, w, work, &lwork, iwork, &liwork, &info );
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sygvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sygvx.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sygvx.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -53,7 +53,7 @@
 //
 template< typename UpLo >
 inline std::ptrdiff_t sygvx( const fortran_int_t itype, const char jobz,
-        const char range, UpLo, const fortran_int_t n, float* a,
+        const char range, const UpLo uplo, const fortran_int_t n, float* a,
         const fortran_int_t lda, float* b, const fortran_int_t ldb,
         const float vl, const float vu, const fortran_int_t il,
         const fortran_int_t iu, const float abstol, fortran_int_t& m,
@@ -74,7 +74,7 @@
 //
 template< typename UpLo >
 inline std::ptrdiff_t sygvx( const fortran_int_t itype, const char jobz,
-        const char range, UpLo, const fortran_int_t n, double* a,
+        const char range, const UpLo uplo, const fortran_int_t n, double* a,
         const fortran_int_t lda, double* b, const fortran_int_t ldb,
         const double vl, const double vu, const fortran_int_t il,
         const fortran_int_t iu, const double abstol, fortran_int_t& m,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sysv.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sysv.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sysv.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -55,7 +55,7 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sysv( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t sysv( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, float* a, const fortran_int_t lda,
         fortran_int_t* ipiv, float* b, const fortran_int_t ldb, float* work,
         const fortran_int_t lwork ) {
@@ -71,7 +71,7 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sysv( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t sysv( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, double* a, const fortran_int_t lda,
         fortran_int_t* ipiv, double* b, const fortran_int_t ldb, double* work,
         const fortran_int_t lwork ) {
@@ -87,7 +87,7 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sysv( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t sysv( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, std::complex<float>* a,
         const fortran_int_t lda, fortran_int_t* ipiv, std::complex<float>* b,
         const fortran_int_t ldb, std::complex<float>* work,
@@ -104,7 +104,7 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sysv( UpLo, const fortran_int_t n,
+inline std::ptrdiff_t sysv( const UpLo uplo, const fortran_int_t n,
         const fortran_int_t nrhs, std::complex<double>* a,
         const fortran_int_t lda, fortran_int_t* ipiv, std::complex<double>* b,
         const fortran_int_t ldb, std::complex<double>* work,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sysvx.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sysvx.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/lapack/driver/sysvx.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -55,12 +55,13 @@
 // * float value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sysvx( const char fact, UpLo, const fortran_int_t n,
-        const fortran_int_t nrhs, const float* a, const fortran_int_t lda,
-        float* af, const fortran_int_t ldaf, fortran_int_t* ipiv,
-        const float* b, const fortran_int_t ldb, float* x,
-        const fortran_int_t ldx, float& rcond, float* ferr, float* berr,
-        float* work, const fortran_int_t lwork, fortran_int_t* iwork ) {
+inline std::ptrdiff_t sysvx( const char fact, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t nrhs, const float* a,
+        const fortran_int_t lda, float* af, const fortran_int_t ldaf,
+        fortran_int_t* ipiv, const float* b, const fortran_int_t ldb,
+        float* x, const fortran_int_t ldx, float& rcond, float* ferr,
+        float* berr, float* work, const fortran_int_t lwork,
+        fortran_int_t* iwork ) {
     fortran_int_t info(0);
     LAPACK_SSYSVX( &fact, &lapack_option< UpLo >::value, &n, &nrhs, a, &lda,
             af, &ldaf, ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr, work,
@@ -74,12 +75,13 @@
 // * double value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sysvx( const char fact, UpLo, const fortran_int_t n,
-        const fortran_int_t nrhs, const double* a, const fortran_int_t lda,
-        double* af, const fortran_int_t ldaf, fortran_int_t* ipiv,
-        const double* b, const fortran_int_t ldb, double* x,
-        const fortran_int_t ldx, double& rcond, double* ferr, double* berr,
-        double* work, const fortran_int_t lwork, fortran_int_t* iwork ) {
+inline std::ptrdiff_t sysvx( const char fact, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t nrhs, const double* a,
+        const fortran_int_t lda, double* af, const fortran_int_t ldaf,
+        fortran_int_t* ipiv, const double* b, const fortran_int_t ldb,
+        double* x, const fortran_int_t ldx, double& rcond, double* ferr,
+        double* berr, double* work, const fortran_int_t lwork,
+        fortran_int_t* iwork ) {
     fortran_int_t info(0);
     LAPACK_DSYSVX( &fact, &lapack_option< UpLo >::value, &n, &nrhs, a, &lda,
             af, &ldaf, ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr, work,
@@ -93,14 +95,14 @@
 // * complex<float> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sysvx( const char fact, UpLo, const fortran_int_t n,
-        const fortran_int_t nrhs, const std::complex<float>* a,
-        const fortran_int_t lda, std::complex<float>* af,
-        const fortran_int_t ldaf, fortran_int_t* ipiv,
-        const std::complex<float>* b, const fortran_int_t ldb,
-        std::complex<float>* x, const fortran_int_t ldx, float& rcond,
-        float* ferr, float* berr, std::complex<float>* work,
-        const fortran_int_t lwork, float* rwork ) {
+inline std::ptrdiff_t sysvx( const char fact, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t nrhs,
+        const std::complex<float>* a, const fortran_int_t lda,
+        std::complex<float>* af, const fortran_int_t ldaf,
+        fortran_int_t* ipiv, const std::complex<float>* b,
+        const fortran_int_t ldb, std::complex<float>* x,
+        const fortran_int_t ldx, float& rcond, float* ferr, float* berr,
+        std::complex<float>* work, const fortran_int_t lwork, float* rwork ) {
     fortran_int_t info(0);
     LAPACK_CSYSVX( &fact, &lapack_option< UpLo >::value, &n, &nrhs, a, &lda,
             af, &ldaf, ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr, work,
@@ -114,14 +116,15 @@
 // * complex<double> value-type.
 //
 template< typename UpLo >
-inline std::ptrdiff_t sysvx( const char fact, UpLo, const fortran_int_t n,
-        const fortran_int_t nrhs, const std::complex<double>* a,
-        const fortran_int_t lda, std::complex<double>* af,
-        const fortran_int_t ldaf, fortran_int_t* ipiv,
-        const std::complex<double>* b, const fortran_int_t ldb,
-        std::complex<double>* x, const fortran_int_t ldx, double& rcond,
-        double* ferr, double* berr, std::complex<double>* work,
-        const fortran_int_t lwork, double* rwork ) {
+inline std::ptrdiff_t sysvx( const char fact, const UpLo uplo,
+        const fortran_int_t n, const fortran_int_t nrhs,
+        const std::complex<double>* a, const fortran_int_t lda,
+        std::complex<double>* af, const fortran_int_t ldaf,
+        fortran_int_t* ipiv, const std::complex<double>* b,
+        const fortran_int_t ldb, std::complex<double>* x,
+        const fortran_int_t ldx, double& rcond, double* ferr, double* berr,
+        std::complex<double>* work, const fortran_int_t lwork,
+        double* rwork ) {
     fortran_int_t info(0);
     LAPACK_ZSYSVX( &fact, &lapack_option< UpLo >::value, &n, &nrhs, a, &lda,
             af, &ldaf, ipiv, b, &ldb, x, &ldx, &rcond, ferr, berr, work,
Modified: sandbox/numeric_bindings/boost/numeric/bindings/std/valarray.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/std/valarray.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/std/valarray.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -29,12 +29,16 @@
         mpl::pair< tag::stride_type<1>, tag::contiguous >
     > property_map;
 
-    static std::ptrdiff_t size1( const Id& t ) {
-        return t.size();
+    static std::ptrdiff_t size1( const Id& id ) {
+        return id.size();
     }
 
-    static value_type* begin_value( Id& t ) {
-        return &t.front();
+    static value_type* begin_value( Id& id ) {
+        return &id[0];
+    }
+
+    static value_type* end_value( Id& id ) {
+        return &id[0] + id.size();
     }
 
 };
Modified: sandbox/numeric_bindings/boost/numeric/bindings/tag.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/tag.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/tag.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -100,6 +100,7 @@
 ADD_TAG( non_unit )
 ADD_TAG( left )
 ADD_TAG( right )
+ADD_TAG( both )
 
 namespace tag {
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/ublas/hermitian.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/ublas/hermitian.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/ublas/hermitian.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -14,7 +14,8 @@
 #include <boost/numeric/bindings/end.hpp>
 #include <boost/numeric/bindings/ublas/detail/basic_ublas_adaptor.hpp>
 #include <boost/numeric/bindings/ublas/detail/convert_to.hpp>
-#include <boost/numeric/bindings/ublas/matrix_expression.hpp>
+#include <boost/numeric/bindings/ublas/matrix.hpp>
+#include <boost/numeric/bindings/ublas/triangular.hpp>
 #include <boost/numeric/bindings/value_type.hpp>
 #include <boost/numeric/ublas/hermitian.hpp>
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/ublas/matrix.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/ublas/matrix.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/ublas/matrix.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -67,6 +67,33 @@
 
 };
 
+template< typename T, std::size_t N, std::size_t M, typename Id, typename Enable >
+struct adaptor< ::boost::numeric::ublas::c_matrix< T, N, M >, Id, Enable > {
+
+    typedef typename copy_const< Id, T >::type value_type;
+    typedef mpl::map<
+        mpl::pair< tag::value_type, value_type >,
+        mpl::pair< tag::entity, tag::matrix >,
+        mpl::pair< tag::size_type<1>, mpl::int_<N> >,
+        mpl::pair< tag::size_type<2>, mpl::int_<M> >,
+        mpl::pair< tag::matrix_type, tag::general >,
+        mpl::pair< tag::data_structure, tag::linear_array >,
+        mpl::pair< tag::data_order, tag::row_major >,
+        mpl::pair< tag::stride_type<1>, mpl::int_<M> >,
+        mpl::pair< tag::stride_type<2>, tag::contiguous >
+    > property_map;
+
+    static value_type* begin_value( Id& id ) {
+        return id.data();
+    }
+
+    static value_type* end_value( Id& id ) {
+        return id.data() + N*M;
+    }
+
+};
+
+
 } // namespace detail
 } // namespace bindings
 } // namespace numeric
Modified: sandbox/numeric_bindings/boost/numeric/bindings/ublas/symmetric.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/ublas/symmetric.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/ublas/symmetric.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -14,7 +14,8 @@
 #include <boost/numeric/bindings/end.hpp>
 #include <boost/numeric/bindings/ublas/detail/convert_to.hpp>
 #include <boost/numeric/bindings/ublas/detail/basic_ublas_adaptor.hpp>
-#include <boost/numeric/bindings/ublas/matrix_expression.hpp>
+#include <boost/numeric/bindings/ublas/matrix.hpp>
+#include <boost/numeric/bindings/ublas/triangular.hpp>
 #include <boost/numeric/bindings/value_type.hpp>
 #include <boost/numeric/ublas/symmetric.hpp>
 
Modified: sandbox/numeric_bindings/boost/numeric/bindings/ublas/vector.hpp
==============================================================================
--- sandbox/numeric_bindings/boost/numeric/bindings/ublas/vector.hpp	(original)
+++ sandbox/numeric_bindings/boost/numeric/bindings/ublas/vector.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -47,6 +47,28 @@
 
 };
 
+template< typename T, std::size_t N, typename Id, typename Enable >
+struct adaptor< ublas::c_vector< T, N >, Id, Enable > {
+
+    typedef typename copy_const< Id, T >::type value_type;
+    typedef mpl::map<
+        mpl::pair< tag::value_type, value_type >,
+        mpl::pair< tag::entity, tag::vector >,
+        mpl::pair< tag::size_type<1>, mpl::int_<N> >,
+        mpl::pair< tag::data_structure, tag::linear_array >,
+        mpl::pair< tag::stride_type<1>, tag::contiguous >
+    > property_map;
+
+    static value_type* begin_value( Id& id ) {
+        return id.data();
+    }
+
+    static value_type* end_value( Id& id ) {
+        return id.data() + N;
+    }
+
+};
+
 } // namespace detail
 } // namespace bindings
 } // namespace numeric
Modified: sandbox/numeric_bindings/libs/numeric/bindings/atlas/others.cc
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/atlas/others.cc	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/atlas/others.cc	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -14,15 +14,14 @@
 #include <algorithm>
 #include <complex>
 
-#include <boost/numeric/bindings/traits/std_vector.hpp>
-#include <boost/numeric/bindings/traits/std_valarray.hpp>
-#include <boost/numeric/bindings/traits/boost_array.hpp>
-#include <boost/numeric/bindings/traits/c_array.hpp>
-#include <boost/numeric/bindings/atlas/cblas1.hpp>
+#include <boost/numeric/bindings/std/vector.hpp>
+#include <boost/numeric/bindings/std/valarray.hpp>
+#include <boost/numeric/bindings/boost/array.hpp>
+#include <boost/numeric/bindings/blas/level1.hpp>
 
 #include "utils.h"
 
-namespace atlas = boost::numeric::bindings::atlas;
+namespace blas = boost::numeric::bindings::blas;
 
 using std::cout;
 using std::endl;
@@ -39,7 +38,7 @@
   print_v (sv, "sv"); 
   cout << "std::valarray" << endl; 
   std::valarray<real_t> va (n); 
-  atlas::set (0.1, va); 
+  blas::set (0.1, va); 
   print_v (va, "va"); 
   cout << endl; 
 
@@ -48,15 +47,15 @@
   for (int i = 0; i < n; ++i)
     d += sv[i] * va[i]; 
 
-  cout << "is " << d << " == " << atlas::dot (sv, va) << " ?" << endl; 
+  cout << "is " << d << " == " << blas::dot (sv, va) << " ?" << endl; 
   cout << endl; 
 
 #ifdef F_FLOAT
-  cout << "sdsdot(): 10 + sv^T va = " << atlas::sdsdot (10, sv, va) << endl; 
+  cout << "sdsdot(): 10 + sv^T va = " << blas::sdsdot (10, sv, va) << endl; 
   cout << endl;
 #endif  
 
-  atlas::scal (real_t(2), sv);
+  blas::scal (real_t(2), sv);
   print_v (sv, "scal(): 2 sv"); 
 
   cout << endl; 
@@ -65,33 +64,33 @@
   cout << "shuffled sv: "; 
   std::copy (sv.begin(), sv.end(), std::ostream_iterator<real_t> (cout, " ")); 
   cout << endl; 
-  int i = atlas::iamax (sv); 
+  int i = blas::iamax (sv); 
   cout << "iamax():\n  index of max el = " << i 
        << "; max el = " << sv[i] << endl; 
   cout << endl; 
 
-  cout << "asum():\n  ||sv||_1 =  " << atlas::asum (sv) 
-       << "; ||va||_1 = " << atlas::asum (va) << endl; 
-  cout << "nrm2():\n  ||sv||_2 = " << atlas::nrm2 (sv) 
-       << "; ||va||_2 = " << atlas::nrm2 (va) << endl; 
+  cout << "asum():\n  ||sv||_1 =  " << blas::asum (sv) 
+       << "; ||va||_1 = " << blas::asum (va) << endl; 
+  cout << "nrm2():\n  ||sv||_2 = " << blas::nrm2 (sv) 
+       << "; ||va||_2 = " << blas::nrm2 (va) << endl; 
   cout << endl; 
 
   cout << "boost::array" << endl;
   boost::array<double, 10> ba;
-  atlas::set (0.1, ba);
+  blas::set (0.1, ba);
   print_v (ba, "ba");
   cout << "C array" << endl; 
   typedef double double_array[10]; 
   double_array ca; 
-  atlas::set (1., ca); 
+  blas::set (1., ca); 
   print_v (ca, "ca");
   cout << endl; 
   
-  atlas::axpy (0.1, ba, ca); 
+  blas::axpy (0.1, ba, ca); 
   print_v (ca, "axpy(): 0.1 ba + ca"); 
 
-  atlas::axpby (0.1, ba, 2., ca); 
-  print_v (ca, "axpby(): 0.1 ba + 2.0 ca"); 
+//  blas::axpby (0.1, ba, 2., ca); 
+//  print_v (ca, "axpby(): 0.1 ba + 2.0 ca"); 
 
   cout << endl;
 }
Modified: sandbox/numeric_bindings/libs/numeric/bindings/atlas/tnt2.cc
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/atlas/tnt2.cc	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/atlas/tnt2.cc	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -3,13 +3,13 @@
 // TNT arrays
 
 #include <iostream>
-#include <boost/numeric/bindings/atlas/cblas1.hpp>
-#include <boost/numeric/bindings/atlas/cblas2.hpp>
-#include <boost/numeric/bindings/traits/tnt.hpp>
+#include <boost/numeric/bindings/blas/level1.hpp>
+#include <boost/numeric/bindings/blas/level2.hpp>
+#include <boost/numeric/bindings/tnt.hpp>
 #include "utils.h"
 #include "tnt_utils.h"
 
-namespace atlas = boost::numeric::bindings::atlas;
+namespace blas = boost::numeric::bindings::blas;
 
 using std::cout;
 using std::endl; 
@@ -27,10 +27,10 @@
   cout << endl; 
 
   vct_t vx (2);
-  atlas::set (1., vx);
+  blas::set (1., vx);
   print_v (vx, "vx"); 
   vct_t vy (3); 
-  atlas::set (0., vy); 
+  blas::set (0., vy); 
   print_v (vy, "vy"); 
   cout << endl; 
 
@@ -39,26 +39,26 @@
   print_m (m, "m"); 
   cout << endl; 
 
-  atlas::gemv (CblasNoTrans, 1.0, m, vx, 0.0, vy);
+  blas::gemv (CblasNoTrans, 1.0, m, vx, 0.0, vy);
   print_v (vy, "m vx"); 
 
-  atlas::gemv (m, vx, vy);
+  blas::gemv (m, vx, vy);
   print_v (vy, "m vx"); 
   cout << endl; 
 
-  atlas::set (0, vx); 
-  atlas::set (1, vy); 
-  atlas::gemv (CblasTrans, 1.0, m, vy, 0.0, vx);
+  blas::set (0, vx); 
+  blas::set (1, vy); 
+  blas::gemv (CblasTrans, 1.0, m, vy, 0.0, vx);
   print_v (vx, "m^T vy"); 
   cout << endl; 
 
-  atlas::set (1, vy); 
-  atlas::gemv (CblasNoTrans, 1.0, m, vx, 1.0, vy);
+  blas::set (1, vy); 
+  blas::gemv (CblasNoTrans, 1.0, m, vx, 1.0, vy);
   print_v (vy, "vy + m vx"); 
   cout << endl; 
 
-  atlas::set (1, vy); 
-  atlas::gemv (CblasNoTrans, 2.0, m, vx, 0.5, vy);
+  blas::set (1, vy); 
+  blas::gemv (CblasNoTrans, 2.0, m, vx, 0.5, vy);
   print_v (vy, "0.5 vy + 2.0 m vx"); 
   cout << endl; 
 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/atlas/tnt3.cc
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/atlas/tnt3.cc	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/atlas/tnt3.cc	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -3,12 +3,12 @@
 // TNT arrays
 
 #include <iostream>
-#include <boost/numeric/bindings/atlas/cblas3.hpp>
+#include <boost/numeric/bindings/blas/level3.hpp>
 #include <boost/numeric/bindings/traits/tnt.hpp>
 #include "utils.h"
 #include "tnt_utils.h"
 
-namespace atlas = boost::numeric::bindings::atlas;
+namespace blas = boost::numeric::bindings::blas;
 
 using std::cout;
 using std::endl; 
@@ -38,15 +38,15 @@
   print_m (c, "C"); 
   cout << endl; 
 
-  atlas::gemm (a, b, c); 
+  blas::gemm (a, b, c); 
   print_m (c, "A B"); 
   cout << endl; 
 
-  atlas::gemm (CblasNoTrans, CblasNoTrans, 1.0, a, b, 0.0, c); 
+  blas::gemm (CblasNoTrans, CblasNoTrans, 1.0, a, b, 0.0, c); 
   print_m (c, "A B"); 
   cout << endl; 
 
-  atlas::gemm (1.0, a, b, 0.0, c); 
+  blas::gemm (1.0, a, b, 0.0, c); 
   print_m (c, "A B"); 
   cout << endl; 
 
@@ -54,21 +54,21 @@
   print_m (c, "C"); 
   cout << endl; 
 
-  atlas::gemm (1.0, a, b, 0.05, c);
+  blas::gemm (1.0, a, b, 0.05, c);
   print_m (c, "0.05 C + A B"); 
   cout << endl; 
 
   m_t d (3, 2);
 
-  atlas::gemm (CblasTrans, CblasTrans, 1.0, b, a, 0.0, d);
+  blas::gemm (CblasTrans, CblasTrans, 1.0, b, a, 0.0, d);
   print_m (d, "B^T A^T"); 
   cout << endl; 
 
-  atlas::gemm (CblasTrans, CblasNoTrans, 1.0, a, b, 0.0, c); 
+  blas::gemm (CblasTrans, CblasNoTrans, 1.0, a, b, 0.0, c); 
   print_m (c, "A^T B"); 
   cout << endl; 
 
-  atlas::gemm (CblasTrans, CblasNoTrans, 1.0, b, a, 0.0, d);
+  blas::gemm (CblasTrans, CblasNoTrans, 1.0, b, a, 0.0, d);
   print_m (d, "B^T A"); 
 
   cout << endl; 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/atlas/tnt_gesv.cc
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/atlas/tnt_gesv.cc	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/atlas/tnt_gesv.cc	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -7,7 +7,7 @@
 
 #include <cstddef>
 #include <iostream>
-#include <boost/numeric/bindings/atlas/cblas.hpp>
+#include <boost/numeric/bindings/blas.hpp>
 #include <boost/numeric/bindings/atlas/clapack.hpp>
 #include <boost/numeric/bindings/traits/tnt.hpp>
 #ifndef F_FORTRAN 
@@ -16,7 +16,7 @@
 #  include <tnt/tnt_fortran_array2d_utils.h>
 #endif 
 
-namespace atlas = boost::numeric::bindings::atlas;
+namespace blas = boost::numeric::bindings::blas;
 
 using std::size_t; 
 using std::cout;
@@ -56,7 +56,7 @@
   cout << "A: " << a << endl; 
   cout << "B: " << b << endl; 
 
-  atlas::lu_solve (a, b);  
+  blas::lu_solve (a, b);  
   cout << "X: " << b << endl; 
 
   cout << endl; 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_cmatr3.cc
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_cmatr3.cc	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_cmatr3.cc	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -6,16 +6,18 @@
 
 #include <iostream>
 #include <complex>
-#include <boost/numeric/bindings/atlas/cblas3.hpp>
-#include <boost/numeric/bindings/traits/ublas_matrix.hpp>
+#include <boost/numeric/bindings/blas/level3.hpp>
+#include <boost/numeric/bindings/ublas/matrix.hpp>
+#include <boost/numeric/bindings/conj.hpp>
 #ifdef F_USE_STD_VECTOR
 #include <vector>
-#include <boost/numeric/bindings/traits/std_vector.hpp> 
+#include <boost/numeric/bindings/std/vector.hpp> 
 #endif 
 #include "utils.h" 
 
 namespace ublas = boost::numeric::ublas;
-namespace atlas = boost::numeric::bindings::atlas;
+namespace blas = boost::numeric::bindings::blas;
+namespace bindings = boost::numeric::bindings;
 
 using std::cout;
 using std::endl; 
@@ -54,7 +56,7 @@
   m_t c (2, 3);
 
   // c = a b
-  atlas::gemm (a, b, c); 
+  blas::gemm ( 1.0, a, b, 0.0, c); 
   print_m (c, "A B"); 
   cout << endl; 
 
@@ -66,17 +68,17 @@
   cout << endl; 
   
   // c = a b
-  atlas::gemm (CblasNoTrans, CblasNoTrans, 1.0, a, b, 0.0, c); 
+  blas::gemm (1.0, a, b, 0.0, c); 
   print_m (c, "A B"); 
   cout << endl; 
 
   // c = a^T b
-  atlas::gemm (CblasTrans, CblasNoTrans, 1.0, a, b, 0.0, c); 
+  blas::gemm ( 1.0, bindings::trans(a), b, 0.0, c); 
   print_m (c, "A^T B"); 
   cout << endl; 
 
   // c = a^H b
-  atlas::gemm (CblasConjTrans, CblasNoTrans, 1.0, a, b, 0.0, c); 
+  blas::gemm (1.0, bindings::conj(a), b, 0.0, c); 
   print_m (c, "A^H B"); 
 
   cout << endl; 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_gesv.cc
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_gesv.cc	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_gesv.cc	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -8,15 +8,16 @@
 #include <cstddef>
 #include <iostream>
 #include <complex>
-#include <boost/numeric/bindings/atlas/cblas.hpp>
-#include <boost/numeric/bindings/atlas/clapack.hpp>
-#include <boost/numeric/bindings/traits/ublas_matrix.hpp>
-#include <boost/numeric/bindings/traits/std_vector.hpp>
-#include <boost/numeric/ublas/matrix_proxy.hpp>
+#include <boost/numeric/bindings/blas.hpp>
+#include <boost/numeric/bindings/lapack/driver/gesv.hpp>
+#include <boost/numeric/bindings/ublas/matrix.hpp>
+#include <boost/numeric/bindings/std/vector.hpp>
+#include <boost/numeric/bindings/ublas/matrix_proxy.hpp>
 #include "utils.h"
 
 namespace ublas = boost::numeric::ublas;
-namespace atlas = boost::numeric::bindings::atlas;
+namespace blas = boost::numeric::bindings::blas;
+namespace lapack = boost::numeric::bindings::lapack;
 
 using std::size_t; 
 using std::cout;
@@ -62,15 +63,15 @@
   m_t aa (a);  // copy of a, because a is `lost' after gesv()
 
   ublas::matrix_column<m_t> xc0 (x, 0), xc1 (x, 1); 
-  atlas::set (1., xc0);  // x[.,0] = 1
-  atlas::set (2., xc1);  // x[.,1] = 2
+  blas::set (1., xc0);  // x[.,0] = 1
+  blas::set (2., xc1);  // x[.,1] = 2
 #ifndef F_ROW_MAJOR
-  atlas::gemm (a, x, b);  // b = a x, so we know the result ;o) 
+  blas::gemm ( 1.0, a, x, 0.0, b);  // b = a x, so we know the result ;o) 
 #else
   // see leading comments for `gesv()' in clapack.hpp
   ublas::matrix_row<m_t> br0 (b, 0), br1 (b, 1); 
-  atlas::gemv (a, xc0, br0);  // b[0,.] = a x[.,0]
-  atlas::gemv (a, xc1, br1);  // b[1,.] = a x[.,1]  =>  b^T = a x
+  blas::gemv (a, xc0, br0);  // b[0,.] = a x[.,0]
+  blas::gemv (a, xc1, br1);  // b[1,.] = a x[.,1]  =>  b^T = a x
 #endif 
 
   print_m (a, "A"); 
@@ -78,15 +79,15 @@
   print_m (b, "B"); 
   cout << endl; 
 
-  atlas::gesv (a, ipiv, b);   // solving the system, b contains x 
+  lapack::gesv (a, ipiv, b);   // solving the system, b contains x 
   print_m (b, "X"); 
   cout << endl; 
 
 #ifndef F_ROW_MAJOR
-  atlas::gemm (aa, b, x);     // check the solution 
+  blas::gemm ( 1.0, aa, b, 0.0, x);     // check the solution 
 #else
-  atlas::gemv (aa, br0, xc0);
-  atlas::gemv (aa, br1, xc1);
+  blas::gemv (aa, br0, xc0);
+  blas::gemv (aa, br1, xc1);
 #endif 
   print_m (x, "B = A X"); 
   cout << endl; 
@@ -117,21 +118,22 @@
   cm_t caa (ca); 
   
   ublas::matrix_column<cm_t> cx0 (cx, 0);
-  atlas::set (cmpx (1, -1), cx0);
+  blas::set (cmpx (1, -1), cx0);
 #ifndef F_ROW_MAJOR
   ublas::matrix_column<cm_t> cb0 (cb, 0); 
 #else
   ublas::matrix_row<cm_t> cb0 (cb, 0); 
 #endif
-  atlas::gemv (ca, cx0, cb0); 
+  blas::gemv ( 1.0, ca, cx0, 0.0, cb0); 
   print_m (cb, "CB"); 
   cout << endl; 
   
-  int ierr = atlas::gesv (ca, cb); // with `internal' pivot vector
+  std::vector< int > pivot( bindings::size1(ca) );
+  int ierr = lapack::gesv (ca, pivot, cb); // with `internal' pivot vector
   if (ierr == 0) {
     print_m (cb, "CX");
     cout << endl; 
-    atlas::gemv (caa, cb0, cx0);
+    blas::gemv (1.0, caa, cb0, 0.0, cx0);
     print_m (cx, "CB");
   }
   else
Modified: sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_gesv2.cc
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_gesv2.cc	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_gesv2.cc	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -7,14 +7,17 @@
 
 #include <cstddef>
 #include <iostream>
-#include <boost/numeric/bindings/atlas/cblas.hpp>
-#include <boost/numeric/bindings/atlas/clapack.hpp>
-#include <boost/numeric/bindings/traits/ublas_matrix.hpp>
-#include <boost/numeric/ublas/matrix_proxy.hpp>
+#include <boost/numeric/bindings/blas/level1/set.hpp>
+#include <boost/numeric/bindings/blas/level3/gemm.hpp>
+#include <boost/numeric/bindings/lapack/driver/gesv.hpp>
+#include <boost/numeric/bindings/ublas/matrix.hpp>
+#include <boost/numeric/bindings/ublas/matrix_proxy.hpp>
+#include <boost/numeric/bindings/std/vector.hpp>
 #include "utils.h"
 
 namespace ublas = boost::numeric::ublas;
-namespace atlas = boost::numeric::bindings::atlas;
+namespace blas = boost::numeric::bindings::blas;
+namespace lapack = boost::numeric::bindings::lapack;
 
 using std::size_t; 
 using std::cout;
@@ -47,9 +50,9 @@
   m_t const aa (a); // copy of a, because a is `lost' after gesv()
 
   ublas::matrix_column<m_t> xc0 (x, 0), xc1 (x, 1); 
-  atlas::set (1., xc0);
-  atlas::set (2., xc1);
-  atlas::gemm (a, x, bb);  // bb = a x, so we know the result ;o) 
+  blas::set( 1., xc0 );
+  blas::set (2., xc1);
+  blas::gemm ( 1., a, x, 0.0, bb);  // bb = a x, so we know the result ;o) 
 
   print_m (a, "A"); 
   cout << endl; 
@@ -65,16 +68,17 @@
   print_m (b, "B for gesv()"); 
   cout << endl; 
 
-  atlas::gesv (a, b);  // solving the system, b contains x 
+  std::vector< int > pivot( bindings::size1( a ) );
+  lapack::gesv (a, pivot,  b);  // solving the system, b contains x 
 
 #ifndef F_ROW_MAJOR
   print_m (b, "X");
   cout << endl; 
-  atlas::gemm (aa, b, x); 
+  blas::gemm (1.0, aa, b, 0.0, x); 
 #else
   print_m (b, "X^T"); 
   cout << endl; 
-  atlas::gemm (CblasNoTrans, CblasTrans, 1.0, aa, b, 0.0, x); 
+  blas::gemm ( 1.0, aa, bindings::trans(b), 0.0, x); 
 #endif 
   print_m (x, "B = A X"); 
 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_gesv3.cc
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_gesv3.cc	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_gesv3.cc	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -7,13 +7,14 @@
 
 #include <cstddef>
 #include <iostream>
-#include <boost/numeric/bindings/atlas/cblas.hpp>
-#include <boost/numeric/bindings/atlas/clapack.hpp>
-#include <boost/numeric/bindings/traits/ublas_matrix.hpp>
+#include <boost/numeric/bindings/lapack/driver/gesv.hpp>
+#include <boost/numeric/bindings/ublas/matrix.hpp>
+#include <boost/numeric/bindings/std/vector.hpp>
 #include <boost/numeric/ublas/io.hpp> 
 
 namespace ublas = boost::numeric::ublas;
-namespace atlas = boost::numeric::bindings::atlas;
+namespace lapack = boost::numeric::bindings::lapack;
+namespace bindings = boost::numeric::bindings;
 
 using std::size_t; 
 using std::cout;
@@ -47,7 +48,8 @@
   cout << "A: " << a << endl; 
   cout << "B: " << b << endl; 
 
-  atlas::lu_solve (a, b);  
+  std::vector< int > pivot( bindings::size1( a ) );
+  lapack::gesv (a, pivot, b);  
   cout << "X: " << b << endl; 
 
   cout << endl; 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_gesv4.cc
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_gesv4.cc	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_gesv4.cc	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -3,22 +3,17 @@
 // using driver function gesv()
 // with ublas::vector<> as RHS
 
-//#define BOOST_NUMERIC_BINDINGS_POOR_MANS_TRAITS 
-//#define BOOST_NO_FUNCTION_TEMPLATE_ORDERING
-
-//#define BOOST_NUMERIC_BINDINGS_NO_SANITY_CHECK
-//#define BOOST_NUMERIC_BINDINGS_NO_STRUCTURE_CHECK
-
 #include <cstddef>
 #include <iostream>
-#include <boost/numeric/bindings/atlas/cblas.hpp>
-#include <boost/numeric/bindings/atlas/clapack.hpp>
-#include <boost/numeric/bindings/traits/ublas_vector2.hpp>
-#include <boost/numeric/bindings/traits/ublas_matrix.hpp>
+#include <boost/numeric/bindings/lapack/driver/gesv.hpp>
+#include <boost/numeric/bindings/std/vector.hpp>
+#include <boost/numeric/bindings/ublas/matrix.hpp>
+#include <boost/numeric/bindings/ublas/vector.hpp>
 #include <boost/numeric/ublas/io.hpp> 
 
 namespace ublas = boost::numeric::ublas;
-namespace atlas = boost::numeric::bindings::atlas;
+namespace lapack = boost::numeric::bindings::lapack;
+namespace bindings = boost::numeric::bindings;
 
 using std::size_t; 
 using std::cout;
@@ -43,7 +38,8 @@
   cout << "A: " << a << endl; 
   cout << "B: " << b << endl; 
 
-  atlas::lu_solve (a, b);  
+  std::vector< int > pivot( bindings::size1( a ) );
+  lapack::gesv (a, pivot, b);  
   cout << "X: " << b << endl; 
   cout << endl; 
 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_gesv5.cc
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_gesv5.cc	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_gesv5.cc	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -3,25 +3,18 @@
 // using driver function gesv()
 // with c_vector<> & c_matrix<> 
 
-//#define BOOST_NUMERIC_BINDINGS_POOR_MANS_TRAITS 
-//#define BOOST_NO_FUNCTION_TEMPLATE_ORDERING
-
-//#define BOOST_NUMERIC_BINDINGS_NO_SANITY_CHECK
-//#define BOOST_NUMERIC_BINDINGS_NO_STRUCTURE_CHECK
-
 #include <cstddef>
 #include <iostream>
-#include <boost/numeric/bindings/atlas/cblas.hpp>
-#include <boost/numeric/bindings/atlas/clapack.hpp>
-#ifndef BOOST_NUMERIC_BINDINGS_POOR_MANS_TRAITS 
-#  include <boost/numeric/bindings/traits/ublas_vector2.hpp>
-#endif 
-#include <boost/numeric/bindings/traits/ublas_matrix.hpp>
-#include <boost/numeric/ublas/matrix_proxy.hpp>
+#include <boost/numeric/bindings/lapack/driver/gesv.hpp>
+#include <boost/numeric/bindings/ublas/matrix.hpp>
+#include <boost/numeric/bindings/ublas/matrix_proxy.hpp>
+#include <boost/numeric/bindings/ublas/vector.hpp>
+#include <boost/numeric/bindings/std/vector.hpp>
 #include <boost/numeric/ublas/io.hpp> 
 
 namespace ublas = boost::numeric::ublas;
-namespace atlas = boost::numeric::bindings::atlas;
+namespace bindings = boost::numeric::bindings;
+namespace lapack = boost::numeric::bindings::lapack;
 
 using std::size_t; 
 using std::cout;
@@ -43,7 +36,9 @@
   a(2,0) = 1.; a(2,1) = -1.; a(2,2) = -1.;
 
   mrhs_t b (1, n);  // right-hand side vector
-  b(0,0) = 4.; b(0,1) = 9.; b(0,2) = -2.; 
+  b(0,0) = 4.; 
+  b(0,1) = 9.;
+  b(0,2) = -2.; 
 
 #ifndef BOOST_NUMERIC_BINDINGS_POOR_MANS_TRAITS
   m3x3_t a2; // for part 2
@@ -56,7 +51,8 @@
   cout << "A: " << a << endl; 
   cout << "B: " << b << endl; 
 
-  atlas::lu_solve (a, b);  
+  std::vector< int > pivota( bindings::size1( a ) );
+  lapack::gesv (a, pivota, b);  
   cout << "X: " << b << endl; 
 
   cout << endl; 
@@ -66,7 +62,8 @@
   cout << "A: " << a2 << endl; 
   cout << "B: " << b2 << endl; 
 
-  atlas::lu_solve (a2, b2);  
+  std::vector< int > pivota2( bindings::size1( a2 ) );
+  lapack::gesv (a2, pivota2, b2);  
   cout << "X: " << b2 << endl; 
 
   cout << endl; 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_getrf_getrs.cc
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_getrf_getrs.cc	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_getrf_getrs.cc	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -7,15 +7,17 @@
 
 #include <cstddef>
 #include <iostream>
-#include <boost/numeric/bindings/atlas/cblas.hpp>
-#include <boost/numeric/bindings/atlas/clapack.hpp>
-#include <boost/numeric/bindings/traits/ublas_matrix.hpp>
-#include <boost/numeric/ublas/matrix_proxy.hpp>
-#include <boost/numeric/bindings/traits/std_vector.hpp>
+#include <boost/numeric/bindings/blas.hpp>
+#include <boost/numeric/bindings/lapack/computational/getrf.hpp>
+#include <boost/numeric/bindings/lapack/computational/getrs.hpp>
+#include <boost/numeric/bindings/ublas/matrix.hpp>
+#include <boost/numeric/bindings/ublas/matrix_proxy.hpp>
+#include <boost/numeric/bindings/std/vector.hpp>
 #include "utils.h"
 
 namespace ublas = boost::numeric::ublas;
-namespace atlas = boost::numeric::bindings::atlas;
+namespace blas = boost::numeric::bindings::blas;
+namespace lapack = boost::numeric::bindings::lapack;
 
 using std::size_t; 
 using std::cout;
@@ -54,15 +56,15 @@
   swap (ar1, ar3);   // swap rows to force pivoting 
 
   ublas::matrix_column<m_t> xc0 (x, 0), xc1 (x, 1); 
-  atlas::set (1., xc0);  // x[.,0] = 1
-  atlas::set (2., xc1);  // x[.,1] = 2
+  blas::set (1., xc0);  // x[.,0] = 1
+  blas::set (2., xc1);  // x[.,1] = 2
 #ifndef F_ROW_MAJOR
-  atlas::gemm (a, x, b);  // b = a x, so we know the result ;o) 
+  blas::gemm ( 1.0, a, x, 0.0, b);  // b = a x, so we know the result ;o) 
 #else
   // see leading comments for `gesv()' in clapack.hpp
   ublas::matrix_row<m_t> br0 (b, 0), br1 (b, 1); 
-  atlas::gemv (a, xc0, br0);  // b[0,.] = a x[.,0]
-  atlas::gemv (a, xc1, br1);  // b[1,.] = a x[.,1]  =>  b^T = a x
+  blas::gemv (a, xc0, br0);  // b[0,.] = a x[.,0]
+  blas::gemv (a, xc1, br1);  // b[1,.] = a x[.,1]  =>  b^T = a x
 #endif 
 
   print_m (a, "A"); 
@@ -72,8 +74,8 @@
 
   std::vector<int> ipiv (n);  // pivot vector
 
-  atlas::getrf (a, ipiv);      // factor a
-  atlas::getrs (a, ipiv, b);   // solve from factorization 
+  lapack::getrf (a, ipiv);      // factor a
+  lapack::getrs (a, ipiv, b);   // solve from factorization 
   print_m (b, "X"); 
   cout << endl; 
 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_getri.cc
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_getri.cc	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_getri.cc	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -8,14 +8,14 @@
 #include <cstddef>
 #include <iostream>
 #include <complex>
-#include <boost/numeric/bindings/atlas/cblas3.hpp>
+#include <boost/numeric/bindings/blas/level3.hpp>
 #include <boost/numeric/bindings/atlas/clapack.hpp>
-#include <boost/numeric/bindings/traits/ublas_matrix.hpp>
+#include <boost/numeric/bindings/ublas/matrix.hpp>
 #include <boost/numeric/bindings/traits/std_vector.hpp>
 #include "utils.h"
 
 namespace ublas = boost::numeric::ublas;
-namespace atlas = boost::numeric::bindings::atlas;
+namespace blas = boost::numeric::bindings::blas;
 
 using std::size_t; 
 using std::cout;
@@ -50,12 +50,12 @@
   m_t aa (a);  // copy of a, for later use
 
   std::vector<int> ipiv (n);   // pivot vector 
-  atlas::lu_factor (a, ipiv);  // alias for getrf()
-  atlas::lu_invert (a, ipiv);  // alias for getri() 
+  blas::lu_factor (a, ipiv);  // alias for getrf()
+  blas::lu_invert (a, ipiv);  // alias for getri() 
 
   m_t i1 (n, n), i2 (n, n);  
-  atlas::gemm (a, aa, i1);   // i1 should be (almost) identity matrix
-  atlas::gemm (aa, a, i2);   // i2 should be (almost) identity matrix
+  blas::gemm (a, aa, i1);   // i1 should be (almost) identity matrix
+  blas::gemm (aa, a, i2);   // i2 should be (almost) identity matrix
 
   print_m (i1, "I = A^(-1) * A");  
   cout << endl; 
@@ -85,14 +85,14 @@
   
   std::vector<int> ipiv2 (3); 
   
-  int ierr = atlas::getrf (ca, ipiv2);
+  int ierr = lapack::getrf (ca, ipiv2);
   if (ierr == 0) {
-    atlas::getri (ca, ipiv2); 
+    blas::getri (ca, ipiv2); 
     cm_t ii (3, 3); 
-    atlas::gemm (ca, caa, ii);
+    blas::gemm (ca, caa, ii);
     print_m (ii, "I = CA^(-1) * CA"); 
     cout << endl; 
-    atlas::gemm (caa, ca, ii);
+    blas::gemm (caa, ca, ii);
     print_m (ii, "I = CA * CA^(-1)"); 
     cout << endl; 
   }
Modified: sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_herm3.cc
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_herm3.cc	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_herm3.cc	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -5,14 +5,15 @@
 #include <stddef.h>
 #include <iostream>
 #include <complex>
-#include <boost/numeric/bindings/atlas/cblas.hpp>
-#include <boost/numeric/bindings/traits/ublas_matrix.hpp>
-#include <boost/numeric/bindings/traits/ublas_hermitian.hpp>
+#include <boost/numeric/bindings/blas.hpp>
+#include <boost/numeric/bindings/ublas/matrix.hpp>
+#include <boost/numeric/bindings/ublas/hermitian.hpp>
 #include "utils.h"
 
 namespace ublas = boost::numeric::ublas;
-namespace atlas = boost::numeric::bindings::atlas;
-namespace traits = boost::numeric::bindings::traits;
+namespace blas = boost::numeric::bindings::blas;
+namespace bindings = boost::numeric::bindings;
+namespace tag = boost::numeric::bindings::tag;
 
 using std::cout;
 using std::cin;
@@ -87,19 +88,19 @@
   print_m (rbl, "b == rb");
   cout << endl; 
 
-  atlas::hemm (ucs, cbl, ccl); 
+  blas::hemm ( tag::left(), 1.0, ucs, cbl, 0.0, ccl); 
   print_m (ccl, "c = a b");
   cout << endl; 
 
-  atlas::hemm (lcs, cbl, ccl);  
+  blas::hemm ( tag::left(), 1.0, lcs, cbl, 0.0, ccl);  
   print_m (ccl, "c = a b");
   cout << endl; 
 
-  atlas::hemm (urs, rbl, rcl); 
+  blas::hemm ( tag::left(), 1.0, urs, rbl, 0.0, rcl); 
   print_m (rcl, "c = a b");
   cout << endl; 
 
-  atlas::hemm (lrs, rbl, rcl); 
+  blas::hemm ( tag::left(), 1.0, lrs, rbl, 0.0, rcl); 
   print_m (rcl, "c = a b");
   cout << endl; 
   
@@ -116,19 +117,19 @@
   print_m (rbr, "b == rb");
   cout << endl; 
 
-  atlas::hemm (cbr, ucs, ccr); 
+  blas::hemm ( tag::right(), 1.0, ucs, cbr, 0.0, ccr); 
   print_m (ccr, "c = b a");
   cout << endl; 
 
-  atlas::hemm (cbr, lcs, ccr);  
+  blas::hemm ( tag::right(), 1.0, lcs, cbr, 0.0, ccr);  
   print_m (ccr, "c = b a");
   cout << endl; 
 
-  atlas::hemm (rbr, urs, rcr); 
+  blas::hemm ( tag::right(), 1.0, urs, rbr, 0.0, rcr); 
   print_m (rcr, "c = b a");
   cout << endl; 
 
-  atlas::hemm (rbr, lrs, rcr); 
+  blas::hemm ( tag::right(), 1.0, lrs, rbr, 0.0, rcr); 
   print_m (rcr, "c = b a");
   cout << endl; 
 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_herm3h2k.cc
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_herm3h2k.cc	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_herm3h2k.cc	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -5,13 +5,16 @@
 #include <stddef.h>
 #include <iostream>
 #include <complex>
-#include <boost/numeric/bindings/atlas/cblas3.hpp>
-#include <boost/numeric/bindings/traits/ublas_hermitian.hpp>
+#include <boost/numeric/bindings/blas/level3.hpp>
+#include <boost/numeric/bindings/ublas/hermitian.hpp>
+#include <boost/numeric/bindings/conj.hpp>
+#include <boost/numeric/bindings/upper.hpp>
+#include <boost/numeric/bindings/lower.hpp>
 #include "utils.h"
 
 namespace ublas = boost::numeric::ublas;
-namespace atlas = boost::numeric::bindings::atlas;
-namespace traits = boost::numeric::bindings::traits;
+namespace blas = boost::numeric::bindings::blas;
+namespace bindings = boost::numeric::bindings;
 
 using std::cout;
 using std::cin;
@@ -69,10 +72,10 @@
   curha_t curha (crmu); 
   clrha_t clrha (crml); 
 
-  atlas::her2k (CblasNoTrans, cac, cbc, cucha); 
-  atlas::her2k (CblasNoTrans, cmplx_t(1,0), cac, cbc, 0., clcha); 
-  atlas::her2k (CblasNoTrans, cmplx_t(1,0), car, cbr, 0., curha); 
-  atlas::her2k (CblasNoTrans, car, cbr, clrha); 
+  blas::her2k (1.0, cac, cbc, 0.0, cucha); 
+  blas::her2k (cmplx_t(1,0), cac, cbc, 0., clcha); 
+  blas::her2k (cmplx_t(1,0), car, cbr, 0., curha); 
+  blas::her2k (1.0, car, cbr, 0.0, clrha); 
 
   print_m (cucha, "cucha");
   cout << endl; 
@@ -104,10 +107,10 @@
   init_m (crmu, const_val<cmplx_t> (cmplx_t (0, 0)));
   init_m (crml, const_val<cmplx_t> (cmplx_t (0, 0)));
 
-  atlas::her2k (CblasUpper, CblasConjTrans, 1.0, cact, cbct, 0.0, ccmu); 
-  atlas::her2k (CblasLower, CblasConjTrans, 1.0, cact, cbct, 0.0, ccml); 
-  atlas::her2k (CblasUpper, CblasConjTrans, 1.0, cart, cbrt, 0.0, crmu); 
-  atlas::her2k (CblasLower, CblasConjTrans, 1.0, cart, cbrt, 0.0, crml); 
+  blas::her2k (1.0, bindings::conj(cact), cbct, 0.0, bindings::upper(ccmu)); 
+  blas::her2k (1.0, bindings::conj(cact), cbct, 0.0, bindings::lower(ccml)); 
+  blas::her2k (1.0, bindings::conj(cart), cbrt, 0.0, bindings::upper(crmu)); 
+  blas::her2k (1.0, bindings::conj(cart), cbrt, 0.0, bindings::lower(crml)); 
 
   print_m (ccmu, "ccmu");
   cout << endl; 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_herm3herk.cc
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_herm3herk.cc	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_herm3herk.cc	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -4,13 +4,16 @@
 
 #include <stddef.h>
 #include <iostream>
-#include <boost/numeric/bindings/atlas/cblas3.hpp>
-#include <boost/numeric/bindings/traits/ublas_hermitian.hpp>
+#include <boost/numeric/bindings/blas/level3.hpp>
+#include <boost/numeric/bindings/ublas/hermitian.hpp>
+#include <boost/numeric/bindings/upper.hpp>
+#include <boost/numeric/bindings/lower.hpp>
+#include <boost/numeric/bindings/conj.hpp>
 #include "utils.h"
 
 namespace ublas = boost::numeric::ublas;
-namespace atlas = boost::numeric::bindings::atlas;
-namespace traits = boost::numeric::bindings::traits;
+namespace blas = boost::numeric::bindings::blas;
+namespace bindings = boost::numeric::bindings;
 
 using std::cout;
 using std::cin;
@@ -67,10 +70,10 @@
   urha_t urha (rmu); 
   lrha_t lrha (rml); 
 
-  atlas::herk (CblasNoTrans, ac, ucha); 
-  atlas::herk (CblasNoTrans, 1.0, ac, 0.0, lcha); 
-  atlas::herk (CblasNoTrans, 1.0, ar, 0.0, urha); 
-  atlas::herk (CblasNoTrans, ar, lrha); 
+  blas::herk (1.0, ac, 0.0, ucha); 
+  blas::herk (1.0, ac, 0.0, lcha); 
+  blas::herk (1.0, ar, 0.0, urha); 
+  blas::herk (1.0, ar, 0.0, lrha); 
 
   print_m (ucha, "ucha");
   cout << endl; 
@@ -95,10 +98,10 @@
   init_m (rmu, const_val<cmplx_t> (cmplx_t (0, 0)));
   init_m (rml, const_val<cmplx_t> (cmplx_t (0, 0)));
 
-  atlas::herk (CblasUpper, CblasConjTrans, 1.0, act, 0.0, cmu); 
-  atlas::herk (CblasLower, CblasConjTrans, 1.0, act, 0.0, cml); 
-  atlas::herk (CblasUpper, CblasConjTrans, 1.0, art, 0.0, rmu); 
-  atlas::herk (CblasLower, CblasConjTrans, 1.0, art, 0.0, rml); 
+  blas::herk ( 1.0, bindings::conj(act), 0.0, bindings::upper(cmu)); 
+  blas::herk ( 1.0, bindings::conj(act), 0.0, bindings::lower(cml)); 
+  blas::herk ( 1.0, bindings::conj(art), 0.0, bindings::upper(rmu)); 
+  blas::herk ( 1.0, bindings::conj(art), 0.0, bindings::lower(rml)); 
 
   print_m (cmu, "cmu");
   cout << endl; 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_matr3.cc
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_matr3.cc	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_matr3.cc	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -7,17 +7,18 @@
 //#define BOOST_NO_FUNCTION_TEMPLATE_ORDERING
 
 #include <iostream>
-#include <boost/numeric/bindings/atlas/cblas3.hpp>
-#include <boost/numeric/bindings/traits/ublas_matrix.hpp>
-#include <boost/numeric/ublas/matrix_proxy.hpp>
+#include <boost/numeric/bindings/blas/level3.hpp>
+#include <boost/numeric/bindings/ublas/matrix.hpp>
+#include <boost/numeric/bindings/ublas/matrix_proxy.hpp>
+#include <boost/numeric/bindings/trans.hpp>
 #ifdef F_USE_STD_VECTOR
 #include <vector>
-#include <boost/numeric/bindings/traits/std_vector.hpp> 
+#include <boost/numeric/bindings/std/vector.hpp> 
 #endif 
 #include "utils.h"
 
 namespace ublas = boost::numeric::ublas;
-namespace atlas = boost::numeric::bindings::atlas;
+namespace blas = boost::numeric::bindings::blas;
 
 using std::cout;
 using std::endl; 
@@ -45,10 +46,10 @@
   m_t c (4, 6);
 
   // c = a b
-  atlas::gemm (a, b, c); 
+  blas::gemm ( 1.0, a, b, 0.0, c); 
   print_m (c, "c = a b"); 
   cout << endl; 
-  atlas::gemm (CblasNoTrans, CblasNoTrans, 1.0, a, b, 0.0, c); 
+  blas::gemm ( 1.0, a, b, 0.0, c); 
   print_m (c, "c = a b"); 
   cout << endl; 
 
@@ -56,24 +57,24 @@
   print_m (c, "c"); 
   cout << endl; 
   // c = 2 a b + 0.5 c
-  atlas::gemm (2.0, a, b, 0.05, c);
+  blas::gemm (2.0, a, b, 0.05, c);
   print_m (c, "c = 2 a b + 0.05 c"); 
   cout << endl; 
 
   m_t d (6, 4);
 
   // d = b^T a^T
-  atlas::gemm (CblasTrans, CblasTrans, 1.0, b, a, 0.0, d);
+  blas::gemm ( 1.0, bindings::trans(b), bindings::trans(a), 0.0, d);
   print_m (d, "d = b^T a^T"); 
   cout << endl; 
 
   // c = a^T b 
-  atlas::gemm (CblasTrans, CblasNoTrans, 1.0, a, b, 0.0, c); 
+  blas::gemm (1.0, bindings::trans(a), b, 0.0, c); 
   print_m (c, "c = a^T b"); 
   cout << endl; 
 
   // d = b^T a
-  atlas::gemm (CblasTrans, CblasNoTrans, 1.0, b, a, 0.0, d);
+  blas::gemm ( 1.0, bindings::trans(b), a, 0.0, d);
   print_m (d, "d = b^T a"); 
   cout << endl; 
 
@@ -82,22 +83,22 @@
   ublas::matrix_range<m_t> dr (d, ublas::range (1, 5), ublas::range (0, 4)); 
 
   // d[1..5][0..4] = a b[0..4][0..4]  
-  atlas::gemm (a, br, dr); 
+  blas::gemm ( 1.0, a, br, 0.0, dr); 
   print_m (d, "d[1..5][0..4] = a b[0..4][0..4]"); 
   cout << endl; 
   
   // d[1..5][0..4] = b[0..4][0..4] a
-  atlas::gemm (br, a, dr); 
+  blas::gemm ( 1.0, br, a, 0.0, dr); 
   print_m (d, "d[1..5][0..4] = b[0..4][0..4] a"); 
   cout << endl; 
   
   // d[1..5][0..4] = b[0..4][0..4] a^T
-  atlas::gemm (CblasNoTrans, CblasTrans, 1.0, br, a, 0.0, dr);
+  blas::gemm ( 1.0, br, bindings::trans(a), 0.0, dr);
   print_m (d, "d[1..5][0..4] = b[0..4][0..4] a^T"); 
   cout << endl; 
 
   // d[1..5][0..4] = a b[0..4][0..4]^T
-  atlas::gemm (CblasNoTrans, CblasTrans, 1.0, a, br, 0.0, dr);
+  blas::gemm ( 1.0, a, bindings::trans(br), 0.0, dr);
   print_m (d, "d[1..5][0..4] = a b[0..4][0..4]^T"); 
   cout << endl; 
 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_posv.cc
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_posv.cc	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_posv.cc	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -12,18 +12,18 @@
 #include <cstddef>
 #include <iostream>
 #include <complex>
-#include <boost/numeric/bindings/atlas/cblas1.hpp>
-#include <boost/numeric/bindings/atlas/cblas2.hpp>
-#include <boost/numeric/bindings/atlas/cblas3.hpp>
-#include <boost/numeric/bindings/atlas/clapack.hpp>
-#include <boost/numeric/bindings/traits/ublas_matrix.hpp>
-#include <boost/numeric/bindings/traits/ublas_symmetric.hpp>
-#include <boost/numeric/bindings/traits/ublas_hermitian.hpp>
-#include <boost/numeric/ublas/matrix_proxy.hpp>
+#include <boost/numeric/bindings/blas.hpp>
+#include <boost/numeric/bindings/lapack/driver/posv.hpp>
+#include <boost/numeric/bindings/ublas/symmetric.hpp>
+#include <boost/numeric/bindings/ublas/hermitian.hpp>
+#include <boost/numeric/bindings/ublas/matrix_proxy.hpp>
 #include "utils.h"
 
 namespace ublas = boost::numeric::ublas;
-namespace atlas = boost::numeric::bindings::atlas;
+namespace blas = boost::numeric::bindings::blas;
+namespace lapack = boost::numeric::bindings::lapack;
+namespace bindings = boost::numeric::bindings;
+namespace tag = boost::numeric::bindings::tag;
 
 using std::size_t; 
 using std::cout;
@@ -91,24 +91,24 @@
   m_t b (nrhs, n);
 #endif
   ublas::matrix_column<m_t> xc0 (x, 0), xc1 (x, 1); 
-  atlas::set (1., xc0);  // x[.,0] = 1
-  atlas::set (2., xc1);  // x[.,1] = 2
+  blas::set (1., xc0);  // x[.,0] = 1
+  blas::set (2., xc1);  // x[.,1] = 2
 #ifndef F_ROW_MAJOR
 #ifndef BOOST_NUMERIC_BINDINGS_POOR_MANS_TRAITS 
-  atlas::symm (sa, x, b);  // b = a x, so we know the result ;o)
+  blas::symm ( tag::left(), 1.0, sa, x, 0.0, b);  // b = a x, so we know the result ;o)
 #else
-  atlas::symm (CblasLeft, 1.0, sa, x, 0.0, b); 
+  blas::symm (CblasLeft, 1.0, sa, x, 0.0, b); 
 #endif 
 #else
   // see leading comments for `gesv()' in clapack.hpp
   ublas::matrix_row<m_t> br0 (b, 0), br1 (b, 1); 
-  atlas::symv (sa, xc0, br0);  // b[0,.] = a x[.,0]
-  atlas::symv (sa, xc1, br1);  // b[1,.] = a x[.,1]  =>  b^T = a x
+  blas::symv (sa, xc0, br0);  // b[0,.] = a x[.,0]
+  blas::symv (sa, xc1, br1);  // b[1,.] = a x[.,1]  =>  b^T = a x
 #endif 
   print_m (b, "b"); 
   cout << endl; 
 
-  atlas::cholesky_solve (sa, b);  // same as posv() 
+  lapack::posv (sa, b);  // same as posv() 
   print_m (b, "x"); 
   cout << endl; 
 
@@ -139,7 +139,7 @@
   cout << endl; 
 
   ublas::matrix_column<cm_t> cx0 (cx, 0);
-  atlas::set (cmplx_t (1, -1), cx0);
+  blas::set (cmplx_t (1, -1), cx0);
   print_m (cx, "cx"); 
   cout << endl; 
 #ifndef F_ROW_MAJOR
@@ -147,11 +147,11 @@
 #else
   ublas::matrix_row<cm_t> cb0 (cb, 0); 
 #endif
-  atlas::hemv (ha, cx0, cb0); 
+  blas::hemv ( 1.0, ha, cx0, 0.0, cb0); 
   print_m (cb, "cb"); 
   cout << endl; 
   
-  int ierr = atlas::posv (ha, cb); 
+  int ierr = lapack::posv (ha, cb); 
   if (ierr == 0)
     print_m (cb, "cx"); 
   else 
@@ -185,14 +185,14 @@
   print_m_data (ha, "ha"); 
   cout << endl; 
 
-  atlas::set (cmplx_t (1, 1), cx0);
+  blas::set (cmplx_t (1, 1), cx0);
   print_m (cx, "cx"); 
   cout << endl; 
-  atlas::hemv (ha, cx0, cb0); 
+  blas::hemv (1.0, ha, cx0, 0.0, cb0); 
   print_m (cb, "cb"); 
   cout << endl; 
   
-  ierr = atlas::cholesky_solve (ha, cb); 
+  ierr = lapack::posv( ha, cb); 
   if (ierr == 0)
     print_m (cb, "cx"); 
   else 
@@ -242,7 +242,7 @@
   print_m (cb32, "cb"); 
   cout << endl; 
   
-  ierr = atlas::posv (ha, cb32); 
+  ierr = lapack::posv (ha, cb32); 
 
   if (ierr == 0)
     print_m (cb32, "cx"); 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_potrf_potrs.cc
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_potrf_potrs.cc	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_potrf_potrs.cc	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -12,18 +12,19 @@
 #include <cstddef>
 #include <iostream>
 #include <complex>
-#include <boost/numeric/bindings/atlas/cblas1.hpp>
-#include <boost/numeric/bindings/atlas/cblas2.hpp>
-#include <boost/numeric/bindings/atlas/cblas3.hpp>
-#include <boost/numeric/bindings/atlas/clapack.hpp>
-#include <boost/numeric/bindings/traits/ublas_matrix.hpp>
-#include <boost/numeric/bindings/traits/ublas_symmetric.hpp>
-#include <boost/numeric/bindings/traits/ublas_hermitian.hpp>
-#include <boost/numeric/ublas/matrix_proxy.hpp>
+#include <boost/numeric/bindings/blas.hpp>
+#include <boost/numeric/bindings/lapack/computational/potrs.hpp>
+#include <boost/numeric/bindings/lapack/computational/potrf.hpp>
+#include <boost/numeric/bindings/ublas/matrix.hpp>
+#include <boost/numeric/bindings/ublas/symmetric.hpp>
+#include <boost/numeric/bindings/ublas/hermitian.hpp>
+#include <boost/numeric/bindings/ublas/matrix_proxy.hpp>
 #include "utils.h"
 
 namespace ublas = boost::numeric::ublas;
-namespace atlas = boost::numeric::bindings::atlas;
+namespace blas = boost::numeric::bindings::blas;
+namespace bindings = boost::numeric::bindings;
+namespace lapack = boost::numeric::bindings::lapack;
 
 using std::size_t; 
 using std::cout;
@@ -74,25 +75,25 @@
   m_t b (nrhs, n);
 #endif
   ublas::matrix_column<m_t> xc0 (x, 0), xc1 (x, 1); 
-  atlas::set (1., xc0);  
-  atlas::set (2., xc1);  
+  blas::set (1., xc0);  
+  blas::set (2., xc1);  
 #ifndef F_ROW_MAJOR
 #ifndef BOOST_NUMERIC_BINDINGS_POOR_MANS_TRAITS 
-  atlas::symm (sa, x, b);
+  blas::symm ( bindings::tag::left(), 1.0, sa, x, 0.0, b);
 #else
-  atlas::symm (CblasLeft, 1.0, sa, x, 0.0, b); 
+  blas::symm ( bindings::tag::left(), 1.0, sa, x, 0.0, b); 
 #endif 
 #else
   ublas::matrix_row<m_t> br0 (b, 0), br1 (b, 1); 
-  atlas::symv (sa, xc0, br0); 
-  atlas::symv (sa, xc1, br1); 
+  blas::symv (sa, xc0, br0); 
+  blas::symv (sa, xc1, br1); 
 #endif 
   print_m (b, "b"); 
   cout << endl; 
 
-  int ierr = atlas::cholesky_factor (sa);  // potrf()
+  int ierr = lapack::potrf (sa);  // potrf()
   if (!ierr) {
-    atlas::cholesky_substitute (sa, b);  // potrs() 
+    lapack::potrs (sa, b);  // potrs() 
     print_m (b, "x"); 
   }
   cout << endl; 
@@ -130,7 +131,7 @@
   cout << endl; 
 
   ublas::matrix_column<cm_t> cx0 (cx, 0);
-  atlas::set (cmplx_t (1, -1), cx0);
+  blas::set (cmplx_t (1, -1), cx0);
   print_m (cx, "cx"); 
   cout << endl; 
 #ifndef F_ROW_MAJOR
@@ -138,13 +139,13 @@
 #else
   ublas::matrix_row<cm_t> cb0 (cb, 0); 
 #endif
-  atlas::hemv (ha, cx0, cb0); 
+  blas::hemv (1.0, ha, cx0, 0.0, cb0); 
   print_m (cb, "cb"); 
   cout << endl; 
   
-  ierr = atlas::potrf (ha); 
+  ierr = lapack::potrf (ha); 
   if (ierr == 0) {
-    atlas::potrs (ha, cb);
+    lapack::potrs (ha, cb);
     print_m (cb, "cx"); 
   }
   else 
@@ -193,9 +194,9 @@
   print_m (cb32, "cb"); 
   cout << endl; 
   
-  ierr = atlas::potrf (ha); 
+  ierr = lapack::potrf (ha); 
   if (ierr == 0) {
-    atlas::potrs (ha, cb32);
+    lapack::potrs (ha, cb32);
     print_m (cb32, "cx"); 
   }
   else 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_potri.cc
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_potri.cc	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_potri.cc	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -11,15 +11,18 @@
 #include <cstddef>
 #include <iostream>
 #include <complex>
-#include <boost/numeric/bindings/atlas/cblas3.hpp>
-#include <boost/numeric/bindings/atlas/clapack.hpp>
-#include <boost/numeric/bindings/traits/ublas_matrix.hpp>
-#include <boost/numeric/bindings/traits/ublas_symmetric.hpp>
-#include <boost/numeric/bindings/traits/ublas_hermitian.hpp>
+#include <boost/numeric/bindings/blas/level3.hpp>
+#include <boost/numeric/bindings/lapack/computational/potri.hpp>
+#include <boost/numeric/bindings/lapack/computational/potrf.hpp>
+#include <boost/numeric/bindings/ublas/matrix.hpp>
+#include <boost/numeric/bindings/ublas/symmetric.hpp>
+#include <boost/numeric/bindings/ublas/hermitian.hpp>
 #include "utils.h"
 
 namespace ublas = boost::numeric::ublas;
-namespace atlas = boost::numeric::bindings::atlas;
+namespace blas = boost::numeric::bindings::blas;
+namespace bindings = boost::numeric::bindings;
+namespace lapack = boost::numeric::bindings::lapack;
 
 using std::size_t; 
 using std::cout;
@@ -79,22 +82,22 @@
                  // .. sa is `lost' after potrf(); 
                  // .. only one parameter of symm() is symmetric matrix
 
-  int ierr = atlas::potrf (sa); 
+  int ierr = lapack::potrf (sa); 
   if (!ierr) {
-    atlas::potri (sa); 
+    lapack::potri (sa); 
     // ri should be (almost) identity matrix: 
     m_t ri (n, n); 
 #ifndef BOOST_NUMERIC_BINDINGS_POOR_MANS_TRAITS 
-    atlas::symm (a2, sa, ri); 
+    blas::symm ( bindings::tag::right(), 1.0, sa, a2, 0.0, ri); 
 #else
-    atlas::symm (CblasRight, 1.0, sa, a2, 0.0, ri); 
+    blas::symm (bindings::tag::right(), 1.0, sa, a2, 0.0, ri); 
 #endif 
     print_m (ri, "I = A * A^(-1)"); 
     cout << endl; 
 #ifndef BOOST_NUMERIC_BINDINGS_POOR_MANS_TRAITS 
-    atlas::symm (sa, a2, ri); 
+    blas::symm ( bindings::tag::left(), 1.0, sa, a2, 0.0, ri); 
 #else
-    atlas::symm (CblasLeft, 1.0, sa, a2, 0.0, ri); 
+    blas::symm (CblasLeft, 1.0, sa, a2, 0.0, ri); 
 #endif 
     print_m (ri, "I = A^(-1) * A"); 
     cout << endl; 
@@ -128,14 +131,14 @@
 
   cm_t ca2 (ha);  // full hermitian 
   
-  ierr = atlas::cholesky_factor (ha);   // potrf()
+  ierr = lapack::potri (ha);   // potrf()
   if (ierr == 0) {
-    atlas::cholesky_invert (ha);        // potri()
+    lapack::potri (ha);        // potri()
     cm_t ic (3, 3); 
 #ifndef BOOST_NUMERIC_BINDINGS_POOR_MANS_TRAITS 
-    atlas::hemm (ca2, ha, ic); 
+    blas::hemm ( bindings::tag::right(), 1.0, ha, ca2, 0.0, ic); 
 #else
-    atlas::hemm (CblasRight, 1.0, ha, ca2, 0.0, ic); 
+    blas::hemm (CblasRight, 1.0, ha, ca2, 0.0, ic); 
 #endif 
     print_m (ic, "I = A * A^(-1)"); 
     cout << endl; 
@@ -168,21 +171,21 @@
 
   ca2 = ha; 
   
-  ierr = atlas::potrf (ha); 
+  ierr = lapack::potrf (ha); 
   if (ierr == 0) {
-    atlas::potri (ha); 
+    lapack::potri (ha); 
     cm_t ic (3, 3); 
 #ifndef BOOST_NUMERIC_BINDINGS_POOR_MANS_TRAITS 
-    atlas::hemm (ca2, ha, ic); 
+    blas::hemm ( bindings::tag::right(), 1.0, ha, ca2, 0.0, ic); 
 #else
-    atlas::hemm (CblasRight, 1.0, ha, ca2, 0.0, ic); 
+    blas::hemm (CblasRight, 1.0, ha, ca2, 0.0, ic); 
 #endif 
     print_m (ic, "I = A * A^(-1)"); 
     cout << endl; 
 #ifndef BOOST_NUMERIC_BINDINGS_POOR_MANS_TRAITS 
-    atlas::hemm (ha, ca2, ic); 
+    blas::hemm ( bindings::tag::left(), 1.0, ha, ca2, 0.0, ic); 
 #else
-    atlas::hemm (CblasLeft, 1.0, ha, ca2, 0.0, ic); 
+    blas::hemm (CblasLeft, 1.0, ha, ca2, 0.0, ic); 
 #endif 
     print_m (ic, "I = A^(-1) * A"); 
     cout << endl; 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_symm2syr.cc
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_symm2syr.cc	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_symm2syr.cc	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -7,15 +7,16 @@
 
 #include <stddef.h>
 #include <iostream>
-#include <boost/numeric/bindings/atlas/cblas1.hpp>
-#include <boost/numeric/bindings/atlas/cblas2.hpp>
-#include <boost/numeric/bindings/traits/ublas_vector.hpp>
-#include <boost/numeric/bindings/traits/ublas_symmetric.hpp>
+#include <boost/numeric/bindings/blas/level1.hpp>
+#include <boost/numeric/bindings/blas/level2.hpp>
+#include <boost/numeric/bindings/ublas/vector.hpp>
+#include <boost/numeric/bindings/ublas/symmetric.hpp>
 #include "utils.h"
 
 namespace ublas = boost::numeric::ublas;
-namespace atlas = boost::numeric::bindings::atlas;
-namespace traits = boost::numeric::bindings::traits;
+namespace blas = boost::numeric::bindings::blas;
+namespace bindings = boost::numeric::bindings;
+namespace tag = boost::numeric::bindings::tag;
 
 using std::cout;
 using std::cin;
@@ -53,7 +54,7 @@
   cout << endl; 
 
   vct_t vx (n), vy (n); 
-  atlas::set (1., vx); 
+  blas::set (1., vx); 
   print_v (vx, "vx"); 
   vy (1) = 1.; 
   print_v (vy, "vy"); 
@@ -80,30 +81,30 @@
   cout << endl; 
 
   // m += x x^T 
-  atlas::spr (vx, ucs); 
+  blas::spr (1.0, vx, ucs); 
   print_m (ucs, "ucs += x x^T"); 
   cout << endl; 
-  atlas::spr (1, vx, lcs); 
+  blas::spr (1.0, vx, lcs); 
   print_m (lcs, "lcs += x x^T"); 
   cout << endl; 
-  atlas::spr (1.0f, vx, urs); 
+  blas::spr (1.0, vx, urs); 
   print_m (urs, "urs += x x^T"); 
   cout << endl; 
-  atlas::spr (vx, lrs); 
+  blas::spr (1.0, vx, lrs); 
   print_m (lrs, "lrs += x x^T"); 
   cout << endl; 
 
   // m += x y^T + y x^T
-  atlas::spr2 (1, vx, vy, ucs); 
+  blas::spr2 (1.0, vx, vy, ucs); 
   print_m (ucs, "ucs += x y^T + y x^T"); 
   cout << endl; 
-  atlas::spr2 (vx, vy, lcs); 
+  blas::spr2 (1.0, vx, vy, lcs); 
   print_m (lcs, "lcs += x y^T + y x^T"); 
   cout << endl; 
-  atlas::spr2 (vx, vy, urs); 
+  blas::spr2 (1.0, vx, vy, urs); 
   print_m (urs, "urs += x y^T + y x^T"); 
   cout << endl; 
-  atlas::spr2 (1., vx, vy, lrs); 
+  blas::spr2 (1.0, vx, vy, lrs); 
   print_m (lrs, "lrs += x y^T + y x^T"); 
   cout << endl; 
 
@@ -135,30 +136,30 @@
   cout << endl; 
 
   // m += x x^T 
-  atlas::syr (vx, ucsa); 
+  blas::syr (1.0, vx, ucsa); 
   print_m (ucsa, "ucsa += x x^T"); 
   cout << endl; 
-  atlas::syr (1, vx, lcsa); 
+  blas::syr (1.0, vx, lcsa); 
   print_m (lcsa, "lcsa += x x^T"); 
   cout << endl; 
-  atlas::syr (1.0f, vx, ursa); 
+  blas::syr (1.0, vx, ursa); 
   print_m (ursa, "ursa += x x^T"); 
   cout << endl; 
-  atlas::syr (vx, lrsa); 
+  blas::syr (1.0, vx, lrsa); 
   print_m (lrsa, "lrsa += x x^T"); 
   cout << endl; 
 
   // m += x y^T + y x^T
-  atlas::syr2 (1, vx, vy, ucsa); 
+  blas::syr2 (1.0, vx, vy, ucsa); 
   print_m (ucsa, "ucsa += x y^T + y x^T"); 
   cout << endl; 
-  atlas::syr2 (vx, vy, lcsa); 
+  blas::syr2 (1.0, vx, vy, lcsa); 
   print_m (lcsa, "lcsa += x y^T + y x^T"); 
   cout << endl; 
-  atlas::syr2 (vx, vy, ursa); 
+  blas::syr2 (1.0, vx, vy, ursa); 
   print_m (ursa, "ursa += x y^T + y x^T"); 
   cout << endl; 
-  atlas::syr2 (1., vx, vy, lrsa); 
+  blas::syr2 (1.0, vx, vy, lrsa); 
   print_m (lrsa, "lrsa += x y^T + y x^T"); 
   cout << endl; 
 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_symm3.cc
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_symm3.cc	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_symm3.cc	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -4,14 +4,15 @@
 
 #include <stddef.h>
 #include <iostream>
-#include <boost/numeric/bindings/atlas/cblas.hpp>
-#include <boost/numeric/bindings/traits/ublas_matrix.hpp>
-#include <boost/numeric/bindings/traits/ublas_symmetric.hpp>
+#include <boost/numeric/bindings/blas/level3/symm.hpp>
+#include <boost/numeric/bindings/ublas/matrix.hpp>
+#include <boost/numeric/bindings/ublas/symmetric.hpp>
 #include "utils.h"
 
 namespace ublas = boost::numeric::ublas;
-namespace atlas = boost::numeric::bindings::atlas;
-namespace traits = boost::numeric::bindings::traits;
+namespace blas = boost::numeric::bindings::blas;
+namespace bindings = boost::numeric::bindings;
+namespace tag = boost::numeric::bindings::tag;
 
 using std::cout;
 using std::cin;
@@ -85,19 +86,19 @@
   print_m (rbl, "b == rb");
   cout << endl; 
 
-  atlas::symm (ucs, cbl, ccl); 
+  blas::symm ( tag::left(), 1, ucs, cbl, 0, ccl ); 
   print_m (ccl, "c = a b");
   cout << endl; 
 
-  atlas::symm (lcs, cbl, ccl);  
+  blas::symm ( tag::left(), 1, lcs, cbl, 0, ccl);  
   print_m (ccl, "c = a b");
   cout << endl; 
 
-  atlas::symm (urs, rbl, rcl); 
+  blas::symm ( tag::left(), 1, urs, rbl, 0, rcl); 
   print_m (rcl, "c = a b");
   cout << endl; 
 
-  atlas::symm (lrs, rbl, rcl); 
+  blas::symm ( tag::left(), 1, lrs, rbl, 0, rcl); 
   print_m (rcl, "c = a b");
   cout << endl; 
   
@@ -114,19 +115,19 @@
   print_m (rbr, "b == rb");
   cout << endl; 
 
-  atlas::symm (cbr, ucs, ccr); 
+  blas::symm ( tag::right(), 1, ucs, cbr, 0, ccr); 
   print_m (ccr, "c = b a");
   cout << endl; 
 
-  atlas::symm (cbr, lcs, ccr);  
+  blas::symm ( tag::right(), 1, lcs, cbr, 0, ccr);  
   print_m (ccr, "c = b a");
   cout << endl; 
 
-  atlas::symm (rbr, urs, rcr); 
+  blas::symm ( tag::right(), 1, urs, rbr, 0, rcr); 
   print_m (rcr, "c = b a");
   cout << endl; 
 
-  atlas::symm (rbr, lrs, rcr); 
+  blas::symm ( tag::right(), 1, lrs, rbr, 0, rcr); 
   print_m (rcr, "c = b a");
   cout << endl; 
 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_symm32.cc
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_symm32.cc	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_symm32.cc	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -7,14 +7,15 @@
 
 #include <stddef.h>
 #include <iostream>
-#include <boost/numeric/bindings/atlas/cblas.hpp>
-#include <boost/numeric/bindings/traits/ublas_matrix.hpp>
-#include <boost/numeric/bindings/traits/ublas_symmetric.hpp>
+#include <boost/numeric/bindings/blas.hpp>
+#include <boost/numeric/bindings/ublas/matrix.hpp>
+#include <boost/numeric/bindings/ublas/symmetric.hpp>
 #include "utils.h"
 
 namespace ublas = boost::numeric::ublas;
-namespace atlas = boost::numeric::bindings::atlas;
-namespace traits = boost::numeric::bindings::traits;
+namespace blas = boost::numeric::bindings::blas;
+namespace bindings = boost::numeric::bindings;
+namespace tag = boost::numeric::bindings::tag;
 
 using std::cout;
 using std::cin;
@@ -86,19 +87,19 @@
   print_m (rbl, "b == rb");
   cout << endl; 
 
-  atlas::symm (CblasLeft, 1., ucs, cbl, 0., ccl); 
+  blas::symm (tag::left(), 1., ucs, cbl, 0., ccl); 
   print_m (ccl, "c = a b");
   cout << endl; 
 
-  atlas::symm (CblasLeft, 1., lcs, cbl, 0., ccl);  
+  blas::symm (tag::left(), 1., lcs, cbl, 0., ccl);  
   print_m (ccl, "c = a b");
   cout << endl; 
 
-  atlas::symm (CblasLeft, 1., urs, rbl, 0., rcl); 
+  blas::symm (tag::left(), 1., urs, rbl, 0., rcl); 
   print_m (rcl, "c = a b");
   cout << endl; 
 
-  atlas::symm (CblasLeft, 1., lrs, rbl, 0., rcl); 
+  blas::symm (tag::left(), 1., lrs, rbl, 0., rcl); 
   print_m (rcl, "c = a b");
   cout << endl; 
   
@@ -115,19 +116,19 @@
   print_m (rbr, "b == rb");
   cout << endl; 
 
-  atlas::symm (CblasRight, 1., ucs, cbr, 0., ccr); 
+  blas::symm (tag::right(), 1., ucs, cbr, 0., ccr); 
   print_m (ccr, "c = b a");
   cout << endl; 
 
-  atlas::symm (CblasRight, 1., lcs, cbr, 0., ccr);  
+  blas::symm (tag::right(), 1., lcs, cbr, 0., ccr);  
   print_m (ccr, "c = b a");
   cout << endl; 
 
-  atlas::symm (CblasRight, 1., urs, rbr, 0., rcr); 
+  blas::symm (tag::right(), 1., urs, rbr, 0., rcr); 
   print_m (rcr, "c = b a");
   cout << endl; 
 
-  atlas::symm (CblasRight, 1., lrs, rbr, 0., rcr); 
+  blas::symm (tag::right(), 1., lrs, rbr, 0., rcr); 
   print_m (rcr, "c = b a");
   cout << endl; 
 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_symm33.cc
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_symm33.cc	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_symm33.cc	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -7,13 +7,16 @@
 
 #include <stddef.h>
 #include <iostream>
-#include <boost/numeric/bindings/atlas/cblas.hpp>
-#include <boost/numeric/bindings/traits/ublas_matrix.hpp>
+#include <boost/numeric/bindings/blas.hpp>
+#include <boost/numeric/bindings/ublas/matrix.hpp>
+#include <boost/numeric/bindings/upper.hpp>
+#include <boost/numeric/bindings/lower.hpp>
 #include "utils.h"
 
 namespace ublas = boost::numeric::ublas;
-namespace atlas = boost::numeric::bindings::atlas;
-namespace traits = boost::numeric::bindings::traits;
+namespace blas = boost::numeric::bindings::blas;
+namespace bindings = boost::numeric::bindings;
+namespace tag = boost::numeric::bindings::tag;
 
 using std::cout;
 using std::cin;
@@ -76,19 +79,19 @@
   print_m (rbl, "b == rb");
   cout << endl; 
 
-  atlas::symm (CblasLeft, CblasUpper, 1., uc, cbl, 0., ccl); 
+  blas::symm (tag::left(),  1., bindings::upper(uc), cbl, 0., ccl); 
   print_m (ccl, "c = a b");
   cout << endl; 
 
-  atlas::symm (CblasLeft, CblasLower, 1., lc, cbl, 0., ccl);  
+  blas::symm (tag::left(),  1., bindings::lower(lc), cbl, 0., ccl);  
   print_m (ccl, "c = a b");
   cout << endl; 
 
-  atlas::symm (CblasLeft, CblasUpper, 1., ur, rbl, 0., rcl); 
+  blas::symm (tag::left(),  1., bindings::upper(ur), rbl, 0., rcl); 
   print_m (rcl, "c = a b");
   cout << endl; 
 
-  atlas::symm (CblasLeft, CblasLower, 1., lr, rbl, 0., rcl); 
+  blas::symm (tag::left(),  1., bindings::lower(lr), rbl, 0., rcl); 
   print_m (rcl, "c = a b");
   cout << endl; 
   
@@ -105,19 +108,19 @@
   print_m (rbr, "b == rb");
   cout << endl; 
 
-  atlas::symm (CblasRight, CblasUpper, 1., uc, cbr, 0., ccr); 
+  blas::symm (tag::right(),  1., bindings::upper(uc), cbr, 0., ccr); 
   print_m (ccr, "c = b a");
   cout << endl; 
 
-  atlas::symm (CblasRight, CblasLower, 1., lc, cbr, 0., ccr);  
+  blas::symm (tag::right(),  1., bindings::lower(lc), cbr, 0., ccr);  
   print_m (ccr, "c = b a");
   cout << endl; 
 
-  atlas::symm (CblasRight, CblasUpper, 1., ur, rbr, 0., rcr); 
+  blas::symm (tag::right(),  1., bindings::upper(ur), rbr, 0., rcr); 
   print_m (rcr, "c = b a");
   cout << endl; 
 
-  atlas::symm (CblasRight, CblasLower, 1., lr, rbr, 0., rcr); 
+  blas::symm (tag::right(),  1., bindings::lower(lr), rbr, 0., rcr); 
   print_m (rcr, "c = b a");
   cout << endl; 
 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_symm3s2k.cc
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_symm3s2k.cc	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_symm3s2k.cc	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -5,13 +5,16 @@
 #include <stddef.h>
 #include <iostream>
 #include <complex>
-#include <boost/numeric/bindings/atlas/cblas3.hpp>
-#include <boost/numeric/bindings/traits/ublas_symmetric.hpp>
+#include <boost/numeric/bindings/blas/level3.hpp>
+#include <boost/numeric/bindings/trans.hpp>
+#include <boost/numeric/bindings/upper.hpp>
+#include <boost/numeric/bindings/lower.hpp>
+#include <boost/numeric/bindings/ublas/symmetric.hpp>
 #include "utils.h"
 
 namespace ublas = boost::numeric::ublas;
-namespace atlas = boost::numeric::bindings::atlas;
-namespace traits = boost::numeric::bindings::traits;
+namespace blas = boost::numeric::bindings::blas;
+namespace bindings = boost::numeric::bindings;
 
 using std::cout;
 using std::cin;
@@ -69,10 +72,10 @@
   ursa_t ursa (rmu); 
   lrsa_t lrsa (rml); 
 
-  atlas::syr2k (CblasNoTrans, ac, bc, ucsa); 
-  atlas::syr2k (CblasNoTrans, 1.0, ac, bc, 0.0, lcsa); 
-  atlas::syr2k (CblasNoTrans, 1.0, ar, br, 0.0, ursa); 
-  atlas::syr2k (CblasNoTrans, ar, br, lrsa); 
+  blas::syr2k (1.0, ac, bc, 0.0, ucsa); 
+  blas::syr2k (1.0, ac, bc, 0.0, lcsa); 
+  blas::syr2k (1.0, ar, br, 0.0, ursa); 
+  blas::syr2k (1.0, ar, br, 0.0, lrsa); 
 
   print_m (ucsa, "ucsa");
   cout << endl; 
@@ -108,10 +111,10 @@
   init_m (rmu, const_val<real_t> (0));
   init_m (rml, const_val<real_t> (0));
 
-  atlas::syr2k (CblasUpper, CblasTrans, 1.0, act, bct, 0.0, cmu); 
-  atlas::syr2k (CblasLower, CblasTrans, 1.0, act, bct, 0.0, cml); 
-  atlas::syr2k (CblasUpper, CblasTrans, 1.0, art, brt, 0.0, rmu); 
-  atlas::syr2k (CblasLower, CblasTrans, 1.0, art, brt, 0.0, rml); 
+  blas::syr2k (1.0, bindings::trans(act), bct, 0.0, bindings::upper(cmu)); 
+  blas::syr2k (1.0, bindings::trans(act), bct, 0.0, bindings::lower(cml)); 
+  blas::syr2k (1.0, bindings::trans(art), brt, 0.0, bindings::upper(rmu)); 
+  blas::syr2k (1.0, bindings::trans(art), brt, 0.0, bindings::lower(rml)); 
 
   print_m (cmu, "cmu");
   cout << endl; 
@@ -162,10 +165,10 @@
   cursa_t cursa (crmu); 
   clrsa_t clrsa (crml); 
 
-  atlas::syr2k (CblasNoTrans, cac, cbc, cucsa); 
-  atlas::syr2k (CblasNoTrans, cmplx_t(1,0), cac, cbc, cmplx_t(0,0), clcsa); 
-  atlas::syr2k (CblasNoTrans, cmplx_t(1,0), car, cbr, cmplx_t(0,0), cursa); 
-  atlas::syr2k (CblasNoTrans, car, cbr, clrsa); 
+  blas::syr2k ( 1.0, cac, cbc, 0.0, cucsa); 
+  blas::syr2k (cmplx_t(1,0), cac, cbc, cmplx_t(0,0), clcsa); 
+  blas::syr2k (cmplx_t(1,0), car, cbr, cmplx_t(0,0), cursa); 
+  blas::syr2k (1.0, car, cbr, 0.0, clrsa); 
 
   print_m (cucsa, "cucsa");
   cout << endl; 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_symm3syrk.cc
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_symm3syrk.cc	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_symm3syrk.cc	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -4,13 +4,16 @@
 
 #include <stddef.h>
 #include <iostream>
-#include <boost/numeric/bindings/atlas/cblas3.hpp>
-#include <boost/numeric/bindings/traits/ublas_symmetric.hpp>
+#include <boost/numeric/bindings/blas/level3.hpp>
+#include <boost/numeric/bindings/ublas/symmetric.hpp>
+#include <boost/numeric/bindings/upper.hpp>
+#include <boost/numeric/bindings/lower.hpp>
+#include <boost/numeric/bindings/trans.hpp>
 #include "utils.h"
 
 namespace ublas = boost::numeric::ublas;
-namespace atlas = boost::numeric::bindings::atlas;
-namespace traits = boost::numeric::bindings::traits;
+namespace blas = boost::numeric::bindings::blas;
+namespace bindings = boost::numeric::bindings;
 
 using std::cout;
 using std::cin;
@@ -51,10 +54,10 @@
   ursa_t ursa (rmu); 
   lrsa_t lrsa (rml); 
 
-  atlas::syrk (CblasNoTrans, ac, ucsa); 
-  atlas::syrk (CblasNoTrans, 1.0, ac, 0.0, lcsa); 
-  atlas::syrk (CblasNoTrans, 1.0, ar, 0.0, ursa); 
-  atlas::syrk (CblasNoTrans, ar, lrsa); 
+  blas::syrk (1.0, ac, 0.0, ucsa); 
+  blas::syrk (1.0, ac, 0.0, lcsa); 
+  blas::syrk (1.0, ar, 0.0, ursa); 
+  blas::syrk (1.0, ar, 0.0, lrsa); 
 
   print_m (ucsa, "ucsa");
   cout << endl; 
@@ -81,10 +84,10 @@
   init_m (rmu, const_val<real_t> (0));
   init_m (rml, const_val<real_t> (0));
 
-  atlas::syrk (CblasUpper, CblasTrans, 1.0, act, 0.0, cmu); 
-  atlas::syrk (CblasLower, CblasTrans, 1.0, act, 0.0, cml); 
-  atlas::syrk (CblasUpper, CblasTrans, 1.0, art, 0.0, rmu); 
-  atlas::syrk (CblasLower, CblasTrans, 1.0, art, 0.0, rml); 
+  blas::syrk ( 1.0, bindings::trans(act), 0.0, bindings::upper(cmu)); 
+  blas::syrk ( 1.0, bindings::trans(act), 0.0, bindings::lower(cml)); 
+  blas::syrk ( 1.0, bindings::trans(art), 0.0, bindings::upper(rmu)); 
+  blas::syrk ( 1.0, bindings::trans(art), 0.0, bindings::lower(rml)); 
 
   print_m (cmu, "cmu");
   cout << endl; 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_symmc3.cc
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_symmc3.cc	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/atlas/ublas_symmc3.cc	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -5,14 +5,15 @@
 #include <stddef.h>
 #include <iostream>
 #include <complex>
-#include <boost/numeric/bindings/atlas/cblas.hpp>
-#include <boost/numeric/bindings/traits/ublas_matrix.hpp>
-#include <boost/numeric/bindings/traits/ublas_symmetric.hpp>
+#include <boost/numeric/bindings/blas.hpp>
+#include <boost/numeric/bindings/ublas/matrix.hpp>
+#include <boost/numeric/bindings/ublas/symmetric.hpp>
 #include "utils.h"
 
 namespace ublas = boost::numeric::ublas;
-namespace atlas = boost::numeric::bindings::atlas;
-namespace traits = boost::numeric::bindings::traits;
+namespace blas = boost::numeric::bindings::blas;
+namespace bindings = boost::numeric::bindings;
+namespace tag = boost::numeric::bindings::tag;
 
 using std::cout;
 using std::cin;
@@ -87,19 +88,19 @@
   print_m (rbl, "b == rb");
   cout << endl; 
 
-  atlas::symm (ucs, cbl, ccl); 
+  blas::symm ( tag::left(), 1.0, ucs, cbl, 0.0, ccl); 
   print_m (ccl, "c = a b");
   cout << endl; 
 
-  atlas::symm (lcs, cbl, ccl);  
+  blas::symm ( tag::left(), 1.0, lcs, cbl, 0.0, ccl);  
   print_m (ccl, "c = a b");
   cout << endl; 
 
-  atlas::symm (urs, rbl, rcl); 
+  blas::symm ( tag::left(), 1.0, urs, rbl, 0.0, rcl); 
   print_m (rcl, "c = a b");
   cout << endl; 
 
-  atlas::symm (lrs, rbl, rcl); 
+  blas::symm ( tag::left(), 1.0, lrs, rbl, 0.0, rcl); 
   print_m (rcl, "c = a b");
   cout << endl; 
   
@@ -116,19 +117,19 @@
   print_m (rbr, "b == rb");
   cout << endl; 
 
-  atlas::symm (cbr, ucs, ccr); 
+  blas::symm (tag::right(), 1.0, ucs, cbr, 0.0, ccr); 
   print_m (ccr, "c = b a");
   cout << endl; 
 
-  atlas::symm (cbr, lcs, ccr);  
+  blas::symm (tag::right(), 1.0, lcs, cbr, 0.0, ccr);  
   print_m (ccr, "c = b a");
   cout << endl; 
 
-  atlas::symm (rbr, urs, rcr); 
+  blas::symm (tag::right(), 1.0, urs, rbr, 0.0, rcr); 
   print_m (rcr, "c = b a");
   cout << endl; 
 
-  atlas::symm (rbr, lrs, rcr); 
+  blas::symm (tag::right(), 1.0, lrs, rbr, 0.0, rcr); 
   print_m (rcr, "c = b a");
   cout << endl; 
 
Modified: sandbox/numeric_bindings/libs/numeric/bindings/atlas/utils.h
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/atlas/utils.h	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/atlas/utils.h	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -4,10 +4,11 @@
 
 #include <stddef.h>
 #include <iostream>
-#include <boost/numeric/bindings/value.hpp>
+#include <boost/numeric/bindings/value_type.hpp>
 #include <boost/numeric/bindings/begin.hpp>
 #include <boost/numeric/bindings/end.hpp>
 #include <boost/numeric/bindings/size.hpp>
+#include <boost/numeric/bindings/at.hpp>
 
 namespace bindings = ::boost::numeric::bindings;
 
@@ -19,7 +20,7 @@
 template <typename V>
 struct vct_access_traits {
   typedef typename 
-  bindings::value<V>::type val_t;
+  bindings::value_type<V>::type val_t;
   typedef val_t& ref_t; 
   static ref_t elem (V& v, size_t i) { return v[i]; }
 };
@@ -27,7 +28,7 @@
 template <typename V>
 struct vct_access_traits<V const> {
   typedef typename 
-  bindings::value<V>::type val_t;
+  bindings::value_type<V>::type val_t;
   typedef val_t ref_t; 
   static ref_t elem (V const& v, size_t i) { return v[i]; }
 };
@@ -120,27 +121,26 @@
 
 #ifndef BOOST_NUMERIC_BINDINGS_POOR_MANS_TRAITS 
 // element access: 
-template <typename M>
+/*template <typename M>
 struct matr_access_traits {
-  typedef typename bindings::value<M>::type& ref_t;
-  //bindings::value<M>::type val_t;
+  typedef typename bindings::value_type<M>::type& ref_t;
+  //bindings::value_type<M>::type val_t;
   //typedef val_t& ref_t; 
   static ref_t elem (M& m, size_t i, size_t j) { return m (i, j); }
 };
 
 template <typename M>
 struct matr_access_traits<M const> {
-  typedef typename 
-  bindings::value<M>::type val_t;
-  typedef val_t ref_t; 
+  typedef typename bindings::value_type<M const>::type& ref_t;
+  //typedef val_t ref_t; 
   static ref_t elem (M const& m, size_t i, size_t j) { return m (i, j); }
 };
 
 template <typename M>
 inline
-typename matr_access_traits<M>::ref_t elem_m (M& m, size_t i, size_t j) {
+typename matr_access_traits<M>::ref_t bindings::at(M& m, size_t i, size_t j) {
   return matr_access_traits<M>::elem (m, i, j); 
-}
+}*/
 #endif 
 
 // initialization: 
@@ -164,7 +164,7 @@
   for (std::size_t i = 0; i < sz1; ++i) 
     for (std::size_t j = 0; j < sz2; ++j) {
 #ifndef BOOST_NUMERIC_BINDINGS_POOR_MANS_TRAITS 
-      elem_m (m, i, j) = f (i, j); 
+      bindings::at( m, i, j ) = f (i, j); 
 #else
       m(i,j) = f (i, j); 
 #endif
@@ -176,26 +176,26 @@
   size_t n = bindings::size1 (m);
   for (size_t i = 0; i < n; ++i) {
 #ifndef BOOST_NUMERIC_BINDINGS_POOR_MANS_TRAITS 
-    elem_m (m, i, i) = n;
+    bindings::at (m, i, i) = n;
 #else
     m(i,i) = n;
 #endif
     for (size_t j = i + 1; j < n; ++j) {
       if (uplo == 'u' || uplo == 'U') {
 #ifndef BOOST_NUMERIC_BINDINGS_POOR_MANS_TRAITS 
-        elem_m (m, i, j) = n - (j - i);
+        bindings::at(m, i, j) = n - (j - i);
 #else
         m(i,j) = n - (j - i);
 #endif
       } else if (uplo == 'l' || uplo == 'L') {
 #ifndef BOOST_NUMERIC_BINDINGS_POOR_MANS_TRAITS 
-        elem_m (m, j, i) = n - (j - i);
+        bindings::at(m, j, i) = n - (j - i);
 #else
         m(j,i) = n - (j - i);
 #endif 
       } else {
 #ifndef BOOST_NUMERIC_BINDINGS_POOR_MANS_TRAITS 
-        elem_m (m, i, j) = elem_m (m, j, i) = n - (j - i);
+        bindings::at(m, i, j) = bindings::at(m, j, i) = n - (j - i);
 #else
         m(i,j) = m(j,i) = n - (j - i);
 #endif
@@ -215,7 +215,7 @@
     for (std::size_t j = 0 ; j < sz2 ; ++j) {
         std::cout << i << "  " << j << " " << std::endl;
 #ifndef BOOST_NUMERIC_BINDINGS_POOR_MANS_TRAITS 
-      std::cout << elem_m (m, i, j) << " ";
+      std::cout << bindings::at(m, i, j) << " ";
 #else
       std::cout << m(i,j) << " ";
 #endif
@@ -231,7 +231,7 @@
     std::cout << ch << " data:\n"; 
   using namespace boost::numeric::bindings;
   std::copy( begin_value( m ), end_value( m ), std::ostream_iterator
-        < typename value< const M >::type >( std::cout, " " ) );
+        < typename value_type< const M >::type >( std::cout, " " ) );
   std::cout << std::endl; 
 
 }
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-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -20,6 +20,7 @@
 namespace ublas =  boost::numeric::ublas;
 namespace lapack =  boost::numeric::bindings::lapack;
 namespace traits =  boost::numeric::bindings::traits;
+namespace tag =  boost::numeric::bindings::tag;
 
 void hseqr(int);
 template <typename T>
@@ -103,7 +104,7 @@
     boost::numeric::bindings::detail::array<double> work_r(n);
     ublas::vector<bool> select_dummy(n);
     integer_t m_info(n+1);
-    lapack::trevc('B','B',select_dummy,G,cVL,cVR,n,m_info,lapack::workspace(work_c,work_r));
+    lapack::trevc( tag::both(),'B',select_dummy,G,cVL,cVR,n,m_info,lapack::workspace(work_c,work_r));
 
     cout << "\n==================================" << endl;
     cout << "Testing left & right eigenvectors..." << endl;
Modified: sandbox/numeric_bindings/libs/numeric/bindings/lapack/test/ublas_geqrf.cpp
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/lapack/test/ublas_geqrf.cpp	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/lapack/test/ublas_geqrf.cpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -30,15 +30,16 @@
 namespace ublas = boost::numeric::ublas;
 namespace lapack = boost::numeric::bindings::lapack;
 namespace bindings = boost::numeric::bindings;
+namespace tag = boost::numeric::bindings::tag;
 
 struct apply_real {
   template< typename MatrixA, typename VectorTAU, typename Workspace >
   static inline integer_t orgqr(  MatrixA& a, const VectorTAU& tau, Workspace work ) {
     return lapack::orgqr( a, tau, work );
   }
-  template< typename MatrixA, typename VectorTAU, typename MatrixC,
+  template< typename Side, typename MatrixA, typename VectorTAU, typename MatrixC,
         typename Workspace >
-  static inline integer_t ormqr( const char side, 
+  static inline integer_t ormqr( const Side side, 
         const MatrixA& a, const VectorTAU& tau, MatrixC& c,
         Workspace work ) {
     return lapack::ormqr( side, a, tau, c, work );
@@ -50,9 +51,9 @@
   static inline integer_t orgqr( MatrixA& a, const VectorTAU& tau, Workspace work ) {
     return lapack::ungqr( a, tau, work );
   }
-  template< typename MatrixA, typename VectorTAU, typename MatrixC,
+  template< typename Side, typename MatrixA, typename VectorTAU, typename MatrixC,
         typename Workspace >
-  static inline integer_t ormqr( const char side, 
+  static inline integer_t ormqr( const Side side, 
         const MatrixA& a, const VectorTAU& tau, MatrixC& c,
         Workspace work ) {
     return lapack::unmqr( side, a, tau, c, work );
@@ -103,9 +104,9 @@
 
    // Apply the orthogonal transformations to a2
    if( boost::is_complex<T>::value ) {
-        apply_t::ormqr( 'L', bindings::conj( a ), tau, a2, workspace );
+        apply_t::ormqr( tag::left(), bindings::conj( a ), tau, a2, workspace );
    } else {
-        apply_t::ormqr( 'L', bindings::trans( a ), tau, a2, workspace );
+        apply_t::ormqr( tag::left(), bindings::trans( a ), tau, a2, workspace );
    }
 
    // The upper triangular parts of a and a2 must be equal.
Modified: sandbox/numeric_bindings/libs/numeric/bindings/numeric-bindings.jam
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/numeric-bindings.jam	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/numeric-bindings.jam	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -38,7 +38,7 @@
 ATLAS_PATH ?= $(NUMERIC_LIB_PATH) ;
 ATLAS_LIB ?= atlas ;
 CBLAS_LIB ?= cblas ;
-LAPACK_ATLAS_LIB ?= lapack ;
+LAPACK_ATLAS_LIB ?= lapack_atlas ;
 
 BLAS_PATH ?= $(NUMERIC_LIB_PATH) ;
 BLAS_LIB  ?= blas ;
Modified: sandbox/numeric_bindings/libs/numeric/bindings/tools/blas_generator.py
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/tools/blas_generator.py	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/tools/blas_generator.py	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -107,7 +107,7 @@
 
         if "has_cblas_order_arg" in info_map[ subroutine ]:
             if info_map[ subroutine ][ "has_cblas_order_arg" ] == True:
-                arg_list.insert( 0, "Order" )
+                arg_list.insert( 0, "const Order order" )
                 cblas_arg_list.insert( 0, "cblas_option< Order >::value" )
                 typename_list.insert( 0, "typename Order" )
                 level0_static_asserts.append( "BOOST_STATIC_ASSERT( (is_same<Order, tag::column_major>::value) );" )
@@ -365,8 +365,12 @@
             first_typename = template_map[ netlib.my_has_key( \
                 my_key, template_map ) ].strip()
         else:
-            first_typename = level1_type_arg_list[0].split(" ")[-1]
-        first_typename_datatype = first_typename[0:6].lower() # 'matrix' or 'vector' or 'scalar'
+            first_typename = ''
+            for tn in level1_type_arg_list:
+                bare_type = tn.split(" ")[-1]
+                if first_typename == '' and bare_type[:6].lower() in [ 'matrix', 'vector' ]:
+                    first_typename = bare_type
+        first_typename_datatype = first_typename[:6].lower() # 'matrix' or 'vector' or 'scalar'
       else:
         level1_type_arg_list.insert( 0, 'typename Value' )
         first_typename = 'Value'
Modified: sandbox/numeric_bindings/libs/numeric/bindings/tools/cblas.py
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/tools/cblas.py	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/tools/cblas.py	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -90,10 +90,10 @@
                             prefix + "option< Diag >::value"
                     elif arg == 'SIDE':
                         info_map[ fortran_routine ][ "argument_map" ][ arg ][ "code" ][ "call_" + prefix + "header" ] = \
-                            prefix + "option< Side >::value"
+                            prefix + "option< " + netlib.template_parameter[ arg ] + " >::value"
                     elif  arg == 'TRANS' or arg == 'TRANSA' or arg == 'TRANSB':
                         info_map[ fortran_routine ][ "argument_map" ][ arg ][ "code" ][ "call_" + prefix + "header" ] = \
-                          prefix + "option< " + netlib.level0_types[ arg ] + " >::value"
+                          prefix + "option< " + netlib.template_parameter[ arg ] + " >::value"
                     else:
                         info_map[ fortran_routine ][ "argument_map" ][ arg ][ "code" ][ "call_" + prefix + "header" ] = call_cblas_header
                 else:
Modified: sandbox/numeric_bindings/libs/numeric/bindings/tools/lapack_generator.py
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/tools/lapack_generator.py	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/tools/lapack_generator.py	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -363,7 +363,10 @@
         first_typename_code = info_map[ subroutine ][ 'argument_map' ][ first_typename_arg ][ 'code' ][ 'level_1_type' ]
         first_typename = first_typename_code.split(" ")[-1]
       else:
-        first_typename = level1_type_arg_list[0].split(" ")[-1]
+        for tn in level1_type_arg_list:
+            bare_type = tn.split(" ")[-1]
+            if first_typename == '' and bare_type[:6].lower() in [ 'matrix', 'vector' ]:
+                first_typename = bare_type
 
       # generate the word "matrix" or "vector", to select the right traits
       first_typename_datatype = first_typename[0:6].lower()
@@ -455,15 +458,16 @@
 
           my_key = group_name.lower() + '.' + value_type + '.min_size_' + name.lower()
           if netlib.my_has_key( my_key, template_map ):
-            sub_template = sub_template.replace( "$MIN_SIZE", indent_lines( template_map[ netlib.my_has_key( my_key, template_map ) ].rstrip(), 8 ) )
+            sub_template = sub_template.replace( "$MIN_SIZE_IMPLEMENTATION", indent_lines( template_map[ netlib.my_has_key( my_key, template_map ) ].rstrip(), 8 ) )
 
           elif info_map[ subroutine ][ 'argument_map' ][ name ][ 'code' ][ 'min_workspace' ] != None:
             resulting_code = 'return ' + info_map[ subroutine ][ 'argument_map' ][ name ][ 'code' ][ 'min_workspace' ] + ';'
-            sub_template = sub_template.replace( "$MIN_SIZE", resulting_code.rstrip() )
+            sub_template = sub_template.replace( "$MIN_SIZE_IMPLEMENTATION", resulting_code.rstrip() )
             
           # Do about the same for the argument stuff.  
           if info_map[ subroutine ][ 'argument_map' ][ name ][ 'code' ][ 'min_workspace_args' ] != None:
-            sub_template = sub_template.replace( "$ARGUMENTS", info_map[ subroutine ][ 'argument_map' ][ name ][ 'code' ][ 'min_workspace_args' ] )
+            sub_template = sub_template.replace( "$TYPES", info_map[ subroutine ][ 'argument_map' ][ name ][ 'code' ][ 'min_workspace_args' ][ 'types' ] )
+            sub_template = sub_template.replace( "$ARGUMENTS", info_map[ subroutine ][ 'argument_map' ][ name ][ 'code' ][ 'min_workspace_args' ][ 'code' ] )
 
             #sub_template += 'FOUND'
           min_size_funcs += sub_template
@@ -530,6 +534,7 @@
     result = result.replace( '$INTEGER_TYPE', netlib.generic_integer_type )
     result = result.replace( '$LIBRARY_INT_TYPE', "fortran_int_t" )
     result = result.replace( '$NAMESPACE', "bindings::" )
+    result = result.replace( '    template<  >\n', '' )
     result = result.replace( '\n\n\n', '\n\n' )
     result = result.replace( "\n    \n", "\n" )
     result = result.replace( "\n        \n", "\n" )
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-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -100,7 +100,7 @@
   return result
 
 
-level0_types = {
+template_parameter = {
     'TRANS': 'Trans',
     'TRANSA': 'TransA',
     'TRANSB': 'TransB',
@@ -110,34 +110,38 @@
     'SIDE'  : 'Side'
 }
 
+def template_tag_type( name, properties ):
+    if 'trait_type' in properties:
+        if properties[ 'trait_type' ] in [ 'trans', 'uplo', 'diag' ]:
+            return 'typedef'
+    if 'SIDE' in name:
+        return 'passthrough'
+    return None
+
 def level0_type( name, properties ):
     result = cpp_type( name, properties )
-    if 'trait_type' in properties:
-        if properties[ 'trait_type' ] in [ 'trans', 'uplo', 'diag', 'side' ]:
-            result = level0_types[ name ]
+    if template_tag_type( name, properties ) != None:
+        result = 'const ' + template_parameter[ name ] + ' ' + name.lower()
     if name == 'INFO':
         result = None
     return result
 
 def level0_typename( name, properties ):
     result = None
-    if 'trait_type' in properties:
-        if properties[ 'trait_type' ] in [ 'trans', 'uplo', 'diag', 'side' ]:
-            result = 'typename ' + level0_types[ name ]
+    if template_tag_type( name, properties ) != None:
+        result = 'typename ' + template_parameter[ name ]
     return result
 
 def call_blas_header( name, properties ):
     result = call_c_type( name, properties )
-    if 'trait_type' in properties:
-        if properties[ 'trait_type' ] in [ 'trans', 'uplo', 'diag', 'side' ]:
-            result = '&blas_option< ' + level0_types[ name ] + ' >::value'
+    if template_tag_type( name, properties ) != None:
+        result = '&blas_option< ' + template_parameter[ name ] + ' >::value'
     return result
 
 def call_lapack_header( name, properties ):
     result = call_c_type( name, properties )
-    if 'trait_type' in properties:
-        if properties[ 'trait_type' ] in [ 'trans', 'uplo', 'diag', 'side' ]:
-            result = '&lapack_option< ' + level0_types[ name ] + ' >::value'
+    if template_tag_type( name, properties ) != None:
+        result = '&lapack_option< ' + template_parameter[ name ] + ' >::value'
     return result
 
 def call_c_type( name, properties ):
@@ -273,6 +277,9 @@
          result = result.replace( complex_float_type, "value_type" )
          result = result.replace( complex_double_type, "value_type" )
 
+  if template_tag_type( name, properties ) == 'passthrough':
+    result = 'const ' + template_parameter[ name ] + ' ' + name.lower()
+
   if name == 'INFO':
     result = None
 
@@ -301,6 +308,8 @@
       result = "typename Matrix" + name
     if properties[ 'type' ] == 'vector':
       result = "typename Vector" + name
+  if template_tag_type( name, properties ) == 'passthrough':
+    result = "typename " + template_parameter[ name ]
   return result
 
 def keyword_typename( name, properties ):
@@ -437,7 +446,7 @@
   result = []
   
   if properties.has_key( 'assert_char' ) and \
-        name not in [ 'TRANS', 'TRANSA', 'TRANSB', 'TRANSR', 'UPLO', 'DIAG' ]:
+        name not in [ 'TRANS', 'TRANSA', 'TRANSB', 'TRANSR', 'UPLO', 'DIAG', 'SIDE' ]:
     assert_line = "BOOST_ASSERT( "
     result_array = []
     for char in properties[ 'assert_char' ]:
@@ -509,8 +518,9 @@
                 result = 'typedef typename result_of::uplo_tag< ' + \
                     matrix_type + ' >::type ' + name.lower() + ';'
             else:
+                trans_type = arg_map[ properties[ 'trait_of' ][ 0 ] ][ 'ref_trans' ]
                 result = 'typedef typename result_of::uplo_tag< ' + \
-                    matrix_type + ', trans >::type ' + name.lower() + ';'
+                    matrix_type + ', ' + trans_type.lower() + ' >::type ' + name.lower() + ';'
         if properties[ 'trait_type' ] == 'diag':
             matrix_type = level1_typename( properties[ 'trait_of' ][ 0 ],
                 arg_map[ properties[ 'trait_of' ][ 0 ] ] ).replace( "typename ", "" )
@@ -588,18 +598,26 @@
 def min_workspace_arg_type( name, properties, arg_map ):
   result = None
   if 'workspace' in properties[ 'io' ] and properties.has_key( 'assert_size_args' ):
+    result = {}
     code_result = []
+    type_result = []
     for arg in properties[ 'assert_size_args' ]:
       if arg_map.has_key( arg ):
-        cpp_type_code = cpp_type( arg, arg_map[ arg ] ).replace( library_integer_type,
+        cpp_type_code = level0_type( arg, arg_map[ arg ] ).replace( library_integer_type,
             "$INTEGER_TYPE" )
+        #cpp_type_code = cpp_type( arg, arg_map[ arg ] ).replace( library_integer_type,
+            #"$INTEGER_TYPE" )
         code_result += [ cpp_type_code ]
+        type_code = level0_typename( arg, arg_map[ arg ] )
+        if  type_code != None:
+            type_result += [ type_code ]
       else:
         if type( properties[ 'assert_size' ] ) == StringType:
           code_result += [ '?' + properties[ 'assert_size' ] ]
         else:
           code_result += [ '??' ]
-    result = ", ".join( code_result )
+    result[ 'code' ] = ", ".join( code_result )
+    result[ 'types' ] = ", ".join( type_result )
   return result
 
 
@@ -1577,6 +1595,12 @@
     argument_properties[ 'code' ][ 'level_0' ] = level0_type( argument_name, argument_properties )
     argument_properties[ 'code' ][ 'level_0_typename' ] = level0_typename( argument_name, argument_properties )
     argument_properties[ 'code' ][ 'call_level_0' ] = call_level0_type( argument_name, argument_properties, argument_map )
+    argument_properties[ 'code' ][ 'typedef' ] = typedef_type( argument_name, argument_properties, argument_map )
+
+  # Pass 2
+  # here, the level1 types may depend on whether there has been a typedef for them 
+  # in pass 1
+  for argument_name, argument_properties in argument_map.iteritems():
     argument_properties[ 'code' ][ 'level_1' ] = level1_type( argument_name, argument_properties )
     argument_properties[ 'code' ][ 'level_1_type' ] = level1_typename( argument_name, argument_properties )
     argument_properties[ 'code' ][ 'call_level_1' ] = call_level1_type( argument_name, argument_properties )
@@ -1584,8 +1608,8 @@
     argument_properties[ 'code' ][ 'workspace_type' ] = workspace_type( argument_name, argument_properties )
     argument_properties[ 'code' ][ 'keyword_type' ] = keyword_typename( argument_name, argument_properties )
 
-  # Pass 2
-  # A second pass is needed, because the asserts may cross-reference other 
+  # Pass 3
+  # A third pass is needed, because the asserts may cross-reference other 
   # variables which have been assigned their code in pass 1.
   for argument_name, argument_properties in argument_map.iteritems():
     argument_properties[ 'code' ][ 'level_1_assert' ] = level1_assert( argument_name, argument_properties, argument_map )
@@ -1597,7 +1621,6 @@
     argument_properties[ 'code' ][ 'min_workspace_args' ] = min_workspace_arg_type( argument_name, argument_properties, argument_map )
     argument_properties[ 'code' ][ 'min_workspace_call' ] = min_workspace_call_type( argument_name, argument_properties, argument_map )
     argument_properties[ 'code' ][ 'user_defined_init' ] = user_defined_type( argument_name, argument_properties, argument_map )
-    argument_properties[ 'code' ][ 'typedef' ] = typedef_type( argument_name, argument_properties, argument_map )
 
   # Pass 3
   # Try to see if a template overrides the code
Modified: sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/computational/orm.hpp
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/computational/orm.hpp	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/computational/orm.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -1,52 +1,45 @@
 $TEMPLATE[ormbr.all.min_size_work.args]
 SIDE,M,N
+$TEMPLATE[ormbr.includes]
+#include <boost/numeric/bindings/detail/if_left.hpp>
 $TEMPLATE[ormbr.all.min_size_work]
-if ( side == 'L' )
-    return std::max< $INTEGER_TYPE >( 1, n );
-else
-    return std::max< $INTEGER_TYPE >( 1, m );
+return std::max< $INTEGER_TYPE >( 1, bindings::detail::if_left( side, n, m ) );
 $TEMPLATE[ormlq.all.min_size_work.args]
 SIDE,M,N
+$TEMPLATE[ormlq.includes]
+#include <boost/numeric/bindings/detail/if_left.hpp>
 $TEMPLATE[ormlq.all.min_size_work]
-if ( side == 'L' )
-    return std::max< $INTEGER_TYPE >( 1, n );
-else
-    return std::max< $INTEGER_TYPE >( 1, m );
+return std::max< $INTEGER_TYPE >( 1, bindings::detail::if_left( side, n, m ) );
 $TEMPLATE[ormqr.all.K.trait]
 size,TAU
 $TEMPLATE[ormqr.all.min_size_work.args]
 SIDE,M,N
+$TEMPLATE[ormqr.includes]
+#include <boost/numeric/bindings/detail/if_left.hpp>
 $TEMPLATE[ormqr.all.min_size_work]
-if ( side == 'L' )
-    return std::max< $INTEGER_TYPE >( 1, n );
-else
-    return std::max< $INTEGER_TYPE >( 1, m );
+return std::max< $INTEGER_TYPE >( 1, bindings::detail::if_left( side, n, m ) );
 $TEMPLATE[ormrq.all.min_size_work.args]
 SIDE,M,N
+$TEMPLATE[ormrq.includes]
+#include <boost/numeric/bindings/detail/if_left.hpp>
 $TEMPLATE[ormrq.all.min_size_work]
-if ( side == 'L' )
-    return std::max< $INTEGER_TYPE >( 1, n );
-else
-    return std::max< $INTEGER_TYPE >( 1, m );
+return std::max< $INTEGER_TYPE >( 1, bindings::detail::if_left( side, n, m ) );
 $TEMPLATE[ormtr.all.min_size_work.args]
 SIDE,M,N
+$TEMPLATE[ormtr.includes]
+#include <boost/numeric/bindings/detail/if_left.hpp>
 $TEMPLATE[ormtr.all.min_size_work]
-if ( side == 'L' )
-    return std::max< $INTEGER_TYPE >( 1, n );
-else
-    return std::max< $INTEGER_TYPE >( 1, m );
+return std::max< $INTEGER_TYPE >( 1, bindings::detail::if_left( side, n, m ) );
 $TEMPLATE[ormql.all.min_size_work.args]
 SIDE,M,N
+$TEMPLATE[ormql.includes]
+#include <boost/numeric/bindings/detail/if_left.hpp>
 $TEMPLATE[ormql.all.min_size_work]
-if ( side == 'L' )
-    return std::max< $INTEGER_TYPE >( 1, n );
-else
-    return std::max< $INTEGER_TYPE >( 1, m );
+return std::max< $INTEGER_TYPE >( 1, bindings::detail::if_left( side, n, m ) );
 $TEMPLATE[ormhr.all.min_size_work.args]
 SIDE,M,N
+$TEMPLATE[ormhr.includes]
+#include <boost/numeric/bindings/detail/if_left.hpp>
 $TEMPLATE[ormhr.all.min_size_work]
-if ( side == 'L' )
-    return std::max< $INTEGER_TYPE >( 1, n );
-else
-    return std::max< $INTEGER_TYPE >( 1, m );
+return std::max< $INTEGER_TYPE >( 1, bindings::detail::if_left( side, n, m ) );
 $TEMPLATE[end]
Modified: sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/computational/un.hpp
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/computational/un.hpp	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/computational/un.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -26,60 +26,52 @@
 return std::max< $INTEGER_TYPE >( 1, m );
 $TEMPLATE[ungtr.all.min_size_work.args]
 SIDE,M,N
+$TEMPLATE[ungtr.includes]
+#include <boost/numeric/bindings/detail/if_left.hpp>
 $TEMPLATE[ungtr.all.min_size_work]
-if ( side == 'L' )
-    return std::max< $INTEGER_TYPE >( 1, n );
-else
-    return std::max< $INTEGER_TYPE >( 1, m );
+return std::max< $INTEGER_TYPE >( 1, bindings::detail::if_left( side, n, m ) );
 $TEMPLATE[unmbr.all.min_size_work.args]
 SIDE,M,N
+$TEMPLATE[unmbr.includes]
+#include <boost/numeric/bindings/detail/if_left.hpp>
 $TEMPLATE[unmbr.all.min_size_work]
-if ( side == 'L' )
-    return std::max< $INTEGER_TYPE >( 1, n );
-else
-    return std::max< $INTEGER_TYPE >( 1, m );
+return std::max< $INTEGER_TYPE >( 1, bindings::detail::if_left( side, n, m ) );
 $TEMPLATE[unmhr.all.min_size_work.args]
 SIDE,M,N
+$TEMPLATE[unmhr.includes]
+#include <boost/numeric/bindings/detail/if_left.hpp>
 $TEMPLATE[unmhr.all.min_size_work]
-if ( side == 'L' )
-    return std::max< $INTEGER_TYPE >( 1, n );
-else
-    return std::max< $INTEGER_TYPE >( 1, m );
+return std::max< $INTEGER_TYPE >( 1, bindings::detail::if_left( side, n, m ) );
 $TEMPLATE[unmlq.all.min_size_work.args]
 SIDE,M,N
+$TEMPLATE[unmlq.includes]
+#include <boost/numeric/bindings/detail/if_left.hpp>
 $TEMPLATE[unmlq.all.min_size_work]
-if ( side == 'L' )
-    return std::max< $INTEGER_TYPE >( 1, n );
-else
-    return std::max< $INTEGER_TYPE >( 1, m );
+return std::max< $INTEGER_TYPE >( 1, bindings::detail::if_left( side, n, m ) );
 $TEMPLATE[unmqr.all.K.trait]
 size,TAU
 $TEMPLATE[unmqr.all.min_size_work.args]
 SIDE,M,N
+$TEMPLATE[unmqr.includes]
+#include <boost/numeric/bindings/detail/if_left.hpp>
 $TEMPLATE[unmqr.all.min_size_work]
-if ( side == 'L' )
-    return std::max< $INTEGER_TYPE >( 1, n );
-else
-    return std::max< $INTEGER_TYPE >( 1, m );
+return std::max< $INTEGER_TYPE >( 1, bindings::detail::if_left( side, n, m ) );
 $TEMPLATE[unmrq.all.min_size_work.args]
 SIDE,M,N
+$TEMPLATE[unmrq.includes]
+#include <boost/numeric/bindings/detail/if_left.hpp>
 $TEMPLATE[unmrq.all.min_size_work]
-if ( side == 'L' )
-    return std::max< $INTEGER_TYPE >( 1, n );
-else
-    return std::max< $INTEGER_TYPE >( 1, m );
+return std::max< $INTEGER_TYPE >( 1, bindings::detail::if_left( side, n, m ) );
 $TEMPLATE[unmql.all.min_size_work.args]
 SIDE,M,N
+$TEMPLATE[unmql.includes]
+#include <boost/numeric/bindings/detail/if_left.hpp>
 $TEMPLATE[unmql.all.min_size_work]
-if ( side == 'L' )
-    return std::max< $INTEGER_TYPE >( 1, n );
-else
-    return std::max< $INTEGER_TYPE >( 1, m );
+return std::max< $INTEGER_TYPE >( 1, bindings::detail::if_left( side, n, m ) );
 $TEMPLATE[unmtr.all.min_size_work.args]
 SIDE,M,N
+$TEMPLATE[unmtr.includes]
+#include <boost/numeric/bindings/detail/if_left.hpp>
 $TEMPLATE[unmtr.all.min_size_work]
-if ( side == 'L' )
-    return std::max< $INTEGER_TYPE >( 1, n );
-else
-    return std::max< $INTEGER_TYPE >( 1, m );
+return std::max< $INTEGER_TYPE >( 1, bindings::detail::if_left( side, n, m ) );
 $TEMPLATE[end]
Modified: sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/lapack.hpp
==============================================================================
--- sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/lapack.hpp	(original)
+++ sandbox/numeric_bindings/libs/numeric/bindings/tools/templates/lapack.hpp	2010-01-19 09:48:24 EST (Tue, 19 Jan 2010)
@@ -238,8 +238,9 @@
     // Static member function that returns the minimum size of
     // workspace-array $WORKSPACE_FUNC.
     //
+    template< $TYPES >
     static $INTEGER_TYPE min_size_$WORKSPACE_FUNC( $ARGUMENTS ) {
-        $MIN_SIZE
+        $MIN_SIZE_IMPLEMENTATION
     }
 
 $TEMPLATE[level1_noworkspace]