$include_dir="/home/hyper-archives/boost-commit/include"; include("$include_dir/msg-header.inc") ?>
Subject: [Boost-commit] svn:boost r69093 - in sandbox/local: boost/detail/preprocessor/keyword boost/detail/preprocessor/keyword/utility boost/local/aux_ libs/local/eval libs/local/example libs/local/simpler_syntax
From: lorcaminiti_at_[hidden]
Date: 2011-02-20 14:30:32
Author: lcaminiti
Date: 2011-02-20 14:30:28 EST (Sun, 20 Feb 2011)
New Revision: 69093
URL: http://svn.boost.org/trac/boost/changeset/69093
Log:
Preparing to move variadic syntax files into main boost/ dir.
Added:
   sandbox/local/boost/detail/preprocessor/keyword/const.hpp   (contents, props changed)
   sandbox/local/boost/detail/preprocessor/keyword/default.hpp   (contents, props changed)
   sandbox/local/boost/detail/preprocessor/keyword/this.hpp   (contents, props changed)
   sandbox/local/boost/detail/preprocessor/keyword/utility/
   sandbox/local/boost/detail/preprocessor/keyword/utility/add.hpp   (contents, props changed)
   sandbox/local/boost/detail/preprocessor/keyword/utility/is.hpp   (contents, props changed)
   sandbox/local/boost/detail/preprocessor/keyword/utility/remove.hpp   (contents, props changed)
   sandbox/local/boost/detail/preprocessor/keyword/void.hpp   (contents, props changed)
   sandbox/local/libs/local/eval/
   sandbox/local/libs/local/eval/01.cpp   (contents, props changed)
   sandbox/local/libs/local/example/add_num_factor_sum_va.cpp   (contents, props changed)
   sandbox/local/libs/local/example/factorial_va.cpp   (contents, props changed)
Text files modified: 
   sandbox/local/boost/local/aux_/function_ref.hpp                   |    11 +++++++----                             
   sandbox/local/libs/local/example/add_num_factor_sum.cpp           |     8 +++-----                                
   sandbox/local/libs/local/example/factorial.cpp                    |    22 ++++++++--------------                  
   sandbox/local/libs/local/simpler_syntax/TODO.txt                  |    24 ++++++++++++++++++++++++                
   sandbox/local/libs/local/simpler_syntax/factorial_nomacros.07.cpp |     8 ++++----                                
   5 files changed, 46 insertions(+), 27 deletions(-)
Added: sandbox/local/boost/detail/preprocessor/keyword/const.hpp
==============================================================================
--- (empty file)
+++ sandbox/local/boost/detail/preprocessor/keyword/const.hpp	2011-02-20 14:30:28 EST (Sun, 20 Feb 2011)
@@ -0,0 +1,56 @@
+
+// Copyright (C) 2009-2011 Lorenzo Caminiti
+// Use, modification, and distribution is subject to the
+// Boost Software License, Version 1.0
+// (see accompanying file LICENSE_1_0.txt or a copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+
+#ifndef BOOST_DETAIL_PP_KEYWORD_CONST_HPP_
+#define BOOST_DETAIL_PP_KEYWORD_CONST_HPP_
+
+#include "utility/is.hpp"
+#include "utility/add.hpp"
+#include "utility/remove.hpp"
+
+// These are not local macros -- DO NOT #UNDEF.
+#define BOOST_DETAIL_PP_KEYWORD_CONST_IS_const (1) /* unary */
+#define const_BOOST_DETAIL_PP_KEYWORD_CONST_IS (1) /* unary */
+#define BOOST_DETAIL_PP_KEYWORD_CONST_REMOVE_const /* nothing */
+#define const_BOOST_DETAIL_PP_KEYWORD_CONST_REMOVE /* nothing */
+
+// Is.
+
+#define BOOST_DETAIL_PP_KEYWORD_IS_CONST_FRONT(tokens) \
+    BOOST_DETAIL_PP_KEYWORD_UTILITY_IS_FRONT(tokens, \
+            BOOST_DETAIL_PP_KEYWORD_CONST_IS_)
+
+#define BOOST_DETAIL_PP_KEYWORD_IS_CONST_BACK(tokens) \
+    BOOST_DETAIL_PP_KEYWORD_UTILITY_IS_BACK(tokens, \
+            _BOOST_DETAIL_PP_KEYWORD_CONST_IS)
+
+// Rremove.
+
+#define BOOST_DETAIL_PP_KEYWORD_CONST_REMOVE_FRONT(tokens) \
+    BOOST_DETAIL_PP_KEYWORD_UTILITY_REMOVE_FRONT(tokens, \
+            BOOST_DETAIL_PP_KEYWORD_IS_CONST_FRONT, \
+            BOOST_DETAIL_PP_KEYWORD_CONST_REMOVE_)
+
+#define BOOST_DETAIL_PP_KEYWORD_CONST_REMOVE_BACK(tokens) \
+    BOOST_DETAIL_PP_KEYWORD_UTILITY_REMOVE_BACK(tokens, \
+            BOOST_DETAIL_PP_KEYWORD_IS_CONST_BACK, \
+            _BOOST_DETAIL_PP_KEYWORD_CONST_REMOVE)
+
+// Add.
+
+#define BOOST_DETAIL_PP_KEYWORD_CONST_ADD_FRONT(tokens) \
+    BOOST_DETAIL_PP_KEYWORD_UTILITY_ADD_FRONT(tokens, \
+            BOOST_DETAIL_PP_KEYWORD_IS_CONST_FRONT, \
+            const)
+
+#define BOOST_DETAIL_PP_KEYWORD_CONST_ADD_BACK(tokens) \
+    BOOST_DETAIL_PP_KEYWORD_UTILITY_ADD_BACK(tokens, \
+            BOOST_DETAIL_PP_KEYWORD_IS_CONST_BACK, \
+            const)
+
+#endif // #include guard
+
Added: sandbox/local/boost/detail/preprocessor/keyword/default.hpp
==============================================================================
--- (empty file)
+++ sandbox/local/boost/detail/preprocessor/keyword/default.hpp	2011-02-20 14:30:28 EST (Sun, 20 Feb 2011)
@@ -0,0 +1,56 @@
+
+// Copyright (C) 2009-2011 Lorenzo Caminiti
+// Use, modification, and distribution is subject to the
+// Boost Software License, Version 1.0
+// (see accompanying file LICENSE_1_0.txt or a copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+
+#ifndef BOOST_DETAIL_PP_KEYWORD_DEFAULT_HPP_
+#define BOOST_DETAIL_PP_KEYWORD_DEFAULT_HPP_
+
+#include "utility/is.hpp"
+#include "utility/add.hpp"
+#include "utility/remove.hpp"
+
+// These are not local macros -- DO NOT #UNDEF.
+#define BOOST_DETAIL_PP_KEYWORD_DEFAULT_IS_default (1) /* unary */
+#define default_BOOST_DETAIL_PP_KEYWORD_DEFAULT_IS (1) /* unary */
+#define BOOST_DETAIL_PP_KEYWORD_DEFAULT_REMOVE_default /* nothing */
+#define default_BOOST_DETAIL_PP_KEYWORD_DEFAULT_REMOVE /* nothing */
+
+// Is.
+
+#define BOOST_DETAIL_PP_KEYWORD_IS_DEFAULT_FRONT(tokens) \
+    BOOST_DETAIL_PP_KEYWORD_UTILITY_IS_FRONT(tokens, \
+            BOOST_DETAIL_PP_KEYWORD_DEFAULT_IS_)
+
+#define BOOST_DETAIL_PP_KEYWORD_IS_DEFAULT_BACK(tokens) \
+    BOOST_DETAIL_PP_KEYWORD_UTILITY_IS_BACK(tokens, \
+            _BOOST_DETAIL_PP_KEYWORD_DEFAULT_IS)
+
+// Rremove.
+
+#define BOOST_DETAIL_PP_KEYWORD_DEFAULT_REMOVE_FRONT(tokens) \
+    BOOST_DETAIL_PP_KEYWORD_UTILITY_REMOVE_FRONT(tokens, \
+            BOOST_DETAIL_PP_KEYWORD_IS_DEFAULT_FRONT, \
+            BOOST_DETAIL_PP_KEYWORD_DEFAULT_REMOVE_)
+
+#define BOOST_DETAIL_PP_KEYWORD_DEFAULT_REMOVE_BACK(tokens) \
+    BOOST_DETAIL_PP_KEYWORD_UTILITY_REMOVE_BACK(tokens, \
+            BOOST_DETAIL_PP_KEYWORD_IS_DEFAULT_BACK, \
+            _BOOST_DETAIL_PP_KEYWORD_DEFAULT_REMOVE)
+
+// Add.
+
+#define BOOST_DETAIL_PP_KEYWORD_DEFAULT_ADD_FRONT(tokens) \
+    BOOST_DETAIL_PP_KEYWORD_UTILITY_ADD_FRONT(tokens, \
+            BOOST_DETAIL_PP_KEYWORD_IS_DEFAULT_FRONT, \
+            default)
+
+#define BOOST_DETAIL_PP_KEYWORD_DEFAULT_ADD_BACK(tokens) \
+    BOOST_DETAIL_PP_KEYWORD_UTILITY_ADD_BACK(tokens, \
+            BOOST_DETAIL_PP_KEYWORD_IS_DEFAULT_BACK, \
+            default)
+
+#endif // #include guard
+
Added: sandbox/local/boost/detail/preprocessor/keyword/this.hpp
==============================================================================
--- (empty file)
+++ sandbox/local/boost/detail/preprocessor/keyword/this.hpp	2011-02-20 14:30:28 EST (Sun, 20 Feb 2011)
@@ -0,0 +1,56 @@
+
+// Copyright (C) 2009-2011 Lorenzo Caminiti
+// Use, modification, and distribution is subject to the
+// Boost Software License, Version 1.0
+// (see accompanying file LICENSE_1_0.txt or a copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+
+#ifndef BOOST_DETAIL_PP_KEYWORD_THIS_HPP_
+#define BOOST_DETAIL_PP_KEYWORD_THIS_HPP_
+
+#include "utility/is.hpp"
+#include "utility/add.hpp"
+#include "utility/remove.hpp"
+
+// These are not local macros -- DO NOT #UNDEF.
+#define BOOST_DETAIL_PP_KEYWORD_THIS_IS_this (1) /* unary */
+#define this_BOOST_DETAIL_PP_KEYWORD_THIS_IS (1) /* unary */
+#define BOOST_DETAIL_PP_KEYWORD_THIS_REMOVE_this /* nothing */
+#define this_BOOST_DETAIL_PP_KEYWORD_THIS_REMOVE /* nothing */
+
+// Is.
+
+#define BOOST_DETAIL_PP_KEYWORD_IS_THIS_FRONT(tokens) \
+    BOOST_DETAIL_PP_KEYWORD_UTILITY_IS_FRONT(tokens, \
+            BOOST_DETAIL_PP_KEYWORD_THIS_IS_)
+
+#define BOOST_DETAIL_PP_KEYWORD_IS_THIS_BACK(tokens) \
+    BOOST_DETAIL_PP_KEYWORD_UTILITY_IS_BACK(tokens, \
+            _BOOST_DETAIL_PP_KEYWORD_THIS_IS)
+
+// Rremove.
+
+#define BOOST_DETAIL_PP_KEYWORD_THIS_REMOVE_FRONT(tokens) \
+    BOOST_DETAIL_PP_KEYWORD_UTILITY_REMOVE_FRONT(tokens, \
+            BOOST_DETAIL_PP_KEYWORD_IS_THIS_FRONT, \
+            BOOST_DETAIL_PP_KEYWORD_THIS_REMOVE_)
+
+#define BOOST_DETAIL_PP_KEYWORD_THIS_REMOVE_BACK(tokens) \
+    BOOST_DETAIL_PP_KEYWORD_UTILITY_REMOVE_BACK(tokens, \
+            BOOST_DETAIL_PP_KEYWORD_IS_THIS_BACK, \
+            _BOOST_DETAIL_PP_KEYWORD_THIS_REMOVE)
+
+// Add.
+
+#define BOOST_DETAIL_PP_KEYWORD_THIS_ADD_FRONT(tokens) \
+    BOOST_DETAIL_PP_KEYWORD_UTILITY_ADD_FRONT(tokens, \
+            BOOST_DETAIL_PP_KEYWORD_IS_THIS_FRONT, \
+            this)
+
+#define BOOST_DETAIL_PP_KEYWORD_THIS_ADD_BACK(tokens) \
+    BOOST_DETAIL_PP_KEYWORD_UTILITY_ADD_BACK(tokens, \
+            BOOST_DETAIL_PP_KEYWORD_IS_THIS_BACK, \
+            this)
+
+#endif // #include guard
+
Added: sandbox/local/boost/detail/preprocessor/keyword/utility/add.hpp
==============================================================================
--- (empty file)
+++ sandbox/local/boost/detail/preprocessor/keyword/utility/add.hpp	2011-02-20 14:30:28 EST (Sun, 20 Feb 2011)
@@ -0,0 +1,25 @@
+
+// Copyright (C) 2009-2011 Lorenzo Caminiti
+// Use, modification, and distribution is subject to the
+// Boost Software License, Version 1.0
+// (see accompanying file LICENSE_1_0.txt or a copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+
+#ifndef BOOST_DETAIL_PP_KEYWORD_UTILITY_ADD_HPP_
+#define BOOST_DETAIL_PP_KEYWORD_UTILITY_ADD_HPP_
+
+#include <boost/preprocessor/control/expr_iif.hpp>
+#include <boost/preprocessor/logical/not.hpp>
+
+// `is_front_macro(tokens)` is 1 iff `tokens` start with `keyword` to add.
+#define BOOST_DETAIL_PP_KEYWORD_UTILITY_ADD_FRONT( \
+        tokens, is_front_macro, keyword) \
+    BOOST_PP_EXPR_IIF(BOOST_PP_NOT(is_front_macro(tokens)), keyword) tokens
+
+// `is_back_macro(tokens)` is 1 iff `tokens` end with `keyword` to add.
+#define BOOST_DETAIL_PP_KEYWORD_UTILITY_ADD_BACK(tokens, \
+        is_back_macro, keyword) \
+    tokens BOOST_PP_EXPR_IIF(BOOST_PP_NOT(is_back_macro(tokens)), keyword)
+
+#endif // #include guard
+
Added: sandbox/local/boost/detail/preprocessor/keyword/utility/is.hpp
==============================================================================
--- (empty file)
+++ sandbox/local/boost/detail/preprocessor/keyword/utility/is.hpp	2011-02-20 14:30:28 EST (Sun, 20 Feb 2011)
@@ -0,0 +1,30 @@
+
+// Copyright (C) 2009-2011 Lorenzo Caminiti
+// Use, modification, and distribution is subject to the
+// Boost Software License, Version 1.0
+// (see accompanying file LICENSE_1_0.txt or a copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+
+#ifndef BOOST_DETAIL_PP_KEYWORD_UTILITY_IS_HPP_
+#define BOOST_DETAIL_PP_KEYWORD_UTILITY_IS_HPP_
+
+// Boost.Preprocessor author P. Mensodines confirmed on an Boost email thread
+// (subject ``check if a token is a keyword (was "BOOST_PP_IS_UNARY()")'')
+// that it is OK to used `PP_IS_UNARY()` to check if tokens match predefined
+// "keyword" as it is done by the macros below (even if `PP_IS_UNARY()` is
+// technically only part of Boost.Preprocessor private API).
+#include <boost/preprocessor/detail/is_unary.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+// `chekcing_prefix ## tokens` expand to unary (e.g., `(1)`) iff `tokens` start
+// with keyword to check.
+#define BOOST_DETAIL_PP_KEYWORD_UTILITY_IS_FRONT(tokens, checking_prefix) \
+    BOOST_PP_IS_UNARY(BOOST_PP_CAT(checking_prefix, tokens))
+
+// `tokens ## chekcing_postfix` expand to unary (e.g., `(1)`) iff `tokens` end
+// with keyword to check.
+#define BOOST_DETAIL_PP_KEYWORD_UTILITY_IS_BACK(tokens, checking_postfix) \
+    BOOST_PP_IS_UNARY(BOOST_PP_CAT(tokens, checking_postfix))
+
+#endif // #include guard
+
Added: sandbox/local/boost/detail/preprocessor/keyword/utility/remove.hpp
==============================================================================
--- (empty file)
+++ sandbox/local/boost/detail/preprocessor/keyword/utility/remove.hpp	2011-02-20 14:30:28 EST (Sun, 20 Feb 2011)
@@ -0,0 +1,38 @@
+
+// Copyright (C) 2009-2011 Lorenzo Caminiti
+// Use, modification, and distribution is subject to the
+// Boost Software License, Version 1.0
+// (see accompanying file LICENSE_1_0.txt or a copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+
+#ifndef BOOST_DETAIL_PP_KEYWORD_UTILITY_REMOVE_HPP_
+#define BOOST_DETAIL_PP_KEYWORD_UTILITY_REMOVE_HPP_
+
+#include <boost/preprocessor/control/iif.hpp>
+#include <boost/preprocessor/tuple/eat.hpp>
+#include <boost/preprocessor/cat.hpp>
+
+// `is_front_macro(tokens)` is 1 iff `tokens` start with keyword to remove.
+// `removing_prefix ## <keyword-to-remove>` must expand to nothing.
+#define BOOST_DETAIL_PP_KEYWORD_UTILITY_REMOVE_FRONT( \
+        tokens, is_front_macro, removing_prefix) \
+    BOOST_PP_EXPAND( /* without EXPAND doesn't expand on MSVC */ \
+        BOOST_PP_IIF(is_front_macro(tokens), \
+            BOOST_PP_CAT \
+        , \
+            tokens BOOST_PP_TUPLE_EAT(2) \
+        )(removing_prefix, tokens) \
+    )
+
+// `is_back_macro(tokens)` is 1 iff `tokens` end with keyword to remove.
+// `<keyword-to-remove> ## removing_postfix` must expand to nothing.
+#define BOOST_DETAIL_PP_KEYWORD_UTILITY_REMOVE_BACK( \
+        tokens, is_back_macro, removing_prefix) \
+    BOOST_PP_IIF(is_back_macro(tokens), \
+        BOOST_PP_CAT \
+    , \
+        tokens BOOST_PP_TUPLE_EAT(2) \
+    )(tokens, removing_postfix)
+
+#endif // #include guard
+
Added: sandbox/local/boost/detail/preprocessor/keyword/void.hpp
==============================================================================
--- (empty file)
+++ sandbox/local/boost/detail/preprocessor/keyword/void.hpp	2011-02-20 14:30:28 EST (Sun, 20 Feb 2011)
@@ -0,0 +1,56 @@
+
+// Copyright (C) 2009-2011 Lorenzo Caminiti
+// Use, modification, and distribution is subject to the
+// Boost Software License, Version 1.0
+// (see accompanying file LICENSE_1_0.txt or a copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+
+#ifndef BOOST_DETAIL_PP_KEYWORD_VOID_HPP_
+#define BOOST_DETAIL_PP_KEYWORD_VOID_HPP_
+
+#include "utility/is.hpp"
+#include "utility/add.hpp"
+#include "utility/remove.hpp"
+
+// These are not local macros -- DO NOT #UNDEF.
+#define BOOST_DETAIL_PP_KEYWORD_VOID_IS_void (1) /* unary */
+#define void_BOOST_DETAIL_PP_KEYWORD_VOID_IS (1) /* unary */
+#define BOOST_DETAIL_PP_KEYWORD_VOID_REMOVE_void /* nothing */
+#define void_BOOST_DETAIL_PP_KEYWORD_VOID_REMOVE /* nothing */
+
+// Is.
+
+#define BOOST_DETAIL_PP_KEYWORD_IS_VOID_FRONT(tokens) \
+    BOOST_DETAIL_PP_KEYWORD_UTILITY_IS_FRONT(tokens, \
+            BOOST_DETAIL_PP_KEYWORD_VOID_IS_)
+
+#define BOOST_DETAIL_PP_KEYWORD_IS_VOID_BACK(tokens) \
+    BOOST_DETAIL_PP_KEYWORD_UTILITY_IS_BACK(tokens, \
+            _BOOST_DETAIL_PP_KEYWORD_VOID_IS)
+
+// Rremove.
+
+#define BOOST_DETAIL_PP_KEYWORD_VOID_REMOVE_FRONT(tokens) \
+    BOOST_DETAIL_PP_KEYWORD_UTILITY_REMOVE_FRONT(tokens, \
+            BOOST_DETAIL_PP_KEYWORD_IS_VOID_FRONT, \
+            BOOST_DETAIL_PP_KEYWORD_VOID_REMOVE_)
+
+#define BOOST_DETAIL_PP_KEYWORD_VOID_REMOVE_BACK(tokens) \
+    BOOST_DETAIL_PP_KEYWORD_UTILITY_REMOVE_BACK(tokens, \
+            BOOST_DETAIL_PP_KEYWORD_IS_VOID_BACK, \
+            _BOOST_DETAIL_PP_KEYWORD_VOID_REMOVE)
+
+// Add.
+
+#define BOOST_DETAIL_PP_KEYWORD_VOID_ADD_FRONT(tokens) \
+    BOOST_DETAIL_PP_KEYWORD_UTILITY_ADD_FRONT(tokens, \
+            BOOST_DETAIL_PP_KEYWORD_IS_VOID_FRONT, \
+            void)
+
+#define BOOST_DETAIL_PP_KEYWORD_VOID_ADD_BACK(tokens) \
+    BOOST_DETAIL_PP_KEYWORD_UTILITY_ADD_BACK(tokens, \
+            BOOST_DETAIL_PP_KEYWORD_IS_VOID_BACK, \
+            void)
+
+#endif // #include guard
+
Modified: sandbox/local/boost/local/aux_/function_ref.hpp
==============================================================================
--- sandbox/local/boost/local/aux_/function_ref.hpp	(original)
+++ sandbox/local/boost/local/aux_/function_ref.hpp	2011-02-20 14:30:28 EST (Sun, 20 Feb 2011)
@@ -24,6 +24,7 @@
 #       include <boost/preprocessor/arithmetic/sub.hpp>
 #       include <boost/preprocessor/arithmetic/inc.hpp>
 #       include <boost/preprocessor/cat.hpp>
+#       include <cassert>
 
 #define BOOST_LOCAL_arg_type(z, arg_n, unused) \
     BOOST_PP_CAT(A, arg_n)
@@ -41,7 +42,8 @@
 #define BOOST_LOCAL_operator_call(z, defaults_n, arity) \
     inline R operator()(BOOST_PP_ENUM_ ## z(BOOST_PP_SUB(arity, defaults_n), \
                 BOOST_LOCAL_arg, ~)) { \
-        return ref_(BOOST_PP_ENUM_ ## z(BOOST_PP_SUB(arity, defaults_n), \
+        assert(ptr_); \
+        return (*ptr_)(BOOST_PP_ENUM_ ## z(BOOST_PP_SUB(arity, defaults_n), \
                 BOOST_LOCAL_arg_name, ~)); \
     }
 
@@ -90,10 +92,11 @@
     > base;
 
 public:
-    /* implicit */ function_ref(base& ref): ref_(ref) {}
+    /* implicit */ function_ref(): ptr_(0) {}
+    /* implicit */ function_ref(base& ref): ptr_(&ref) {}
 
     function_ref& operator=(base& ref) {
-        ref_ = ref;
+        ptr_ = &ref;
         return *this;
     }
 
@@ -105,7 +108,7 @@
             BOOST_LOCAL_operator_call, BOOST_LOCAL_arity)
 
 private:
-    base& ref_;
+    base* ptr_;
 };
 
 }} // namespace boost::local
Added: sandbox/local/libs/local/eval/01.cpp
==============================================================================
--- (empty file)
+++ sandbox/local/libs/local/eval/01.cpp	2011-02-20 14:30:28 EST (Sun, 20 Feb 2011)
@@ -0,0 +1,13 @@
+
+
+struct X {
+};
+
+template<typename T>
+void f() {}
+
+int main() {
+    f<struct Y {}>();
+    return 0;
+}
+
Modified: sandbox/local/libs/local/example/add_num_factor_sum.cpp
==============================================================================
--- sandbox/local/libs/local/example/add_num_factor_sum.cpp	(original)
+++ sandbox/local/libs/local/example/add_num_factor_sum.cpp	2011-02-20 14:30:28 EST (Sun, 20 Feb 2011)
@@ -15,15 +15,13 @@
     double sum = 0.0;
     int factor = 10;
 
-    BOOST_LOCAL_FUNCTION(
-    (void) (add)( (double)(num) (const bind)((factor)) (bind)((&sum)) )
-    ) {
+    void BOOST_LOCAL_FUNCTION_PARAMS( (double num) (const bind factor)
+            (bind& sum) ) {
         sum += factor * num;
         std::clog << "Summed: " << sum << std::endl;
-    } BOOST_LOCAL_FUNCTION_END(add)
+    } BOOST_LOCAL_FUNCTION_NAME(add)
 
     add(100.0);
-
     return 0;
 }
 //]
Added: sandbox/local/libs/local/example/add_num_factor_sum_va.cpp
==============================================================================
--- (empty file)
+++ sandbox/local/libs/local/example/add_num_factor_sum_va.cpp	2011-02-20 14:30:28 EST (Sun, 20 Feb 2011)
@@ -0,0 +1,29 @@
+
+// Copyright (C) 2009-2011 Lorenzo Caminiti
+// Use, modification, and distribution is subject to the
+// Boost Software License, Version 1.0
+// (see accompanying file LICENSE_1_0.txt or a copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+
+// Simple parenthesized syntax example used by the documentation
+// (syntax for variadic macros only).
+
+//[ add_num_factor_sum_va_cpp
+#include <boost/local/function.hpp>
+#include <iostream>
+
+int main() {
+    double sum = 0.0;
+    int factor = 10;
+
+    void BOOST_LOCAL_FUNCTION_PARAMS(double num, const bind factor,
+            bind& sum) {
+        sum += factor * num;
+        std::clog << "Summed: " << sum << std::endl;
+    } BOOST_LOCAL_FUNCTION_NAME(add)
+
+    add(100.0);
+    return 0;
+}
+//]
+
Modified: sandbox/local/libs/local/example/factorial.cpp
==============================================================================
--- sandbox/local/libs/local/example/factorial.cpp	(original)
+++ sandbox/local/libs/local/example/factorial.cpp	2011-02-20 14:30:28 EST (Sun, 20 Feb 2011)
@@ -15,30 +15,24 @@
 #include <vector>
 
 int main () {
-    std::vector<int> v;
-    v.resize(3);
-    v[0] = 1; v[1] = 4; v[2] = 7;
-    std::ostringstream factorials;
+    std::ostringstream output;
 
-    BOOST_LOCAL_FUNCTION(
-    (int) (factorial)(
-            (int)(n)
-            (bool)(recursion)(default)(false)
-            (bind)((&factorials))
-        )
-    ) {
+    int BOOST_LOCAL_FUNCTION_PARAMS( (int n) (bool recursion)(default false)
+            (bind& output) ) {
         int result = 0;
 
         if (n < 2 ) result = 1;
         else result = n * factorial(n - 1, true); // Recursive call.
 
-        if (!recursion) factorials << result << " ";
+        if (!recursion) output << result << " ";
         return result;
-    } BOOST_LOCAL_FUNCTION_END(factorial)
+    } BOOST_LOCAL_FUNCTION_NAME(factorial)
 
+    std::vector<int> v(3);
+    v[0] = 1; v[1] = 4; v[2] = 7;
     std::for_each(v.begin(), v.end(), factorial);
-    std::cout << factorials.str() << std::endl;
 
+    std::cout << output.str() << std::endl;
     return 0;
 }
 //]
Added: sandbox/local/libs/local/example/factorial_va.cpp
==============================================================================
--- (empty file)
+++ sandbox/local/libs/local/example/factorial_va.cpp	2011-02-20 14:30:28 EST (Sun, 20 Feb 2011)
@@ -0,0 +1,40 @@
+
+// Copyright (C) 2009-2011 Lorenzo Caminiti
+// Use, modification, and distribution is subject to the
+// Boost Software License, Version 1.0
+// (see accompanying file LICENSE_1_0.txt or a copy at
+// http://www.boost.org/LICENSE_1_0.txt).
+
+// Use recursion, default parameters, and bind by non-const reference
+// (syntax for variadic macros only).
+
+//[ factorial_va_cpp
+#include <boost/local/function.hpp>
+#include <iostream>
+#include <sstream>
+#include <algorithm>
+#include <vector>
+
+int main () {
+    std::ostringstream output;
+
+    int BOOST_LOCAL_FUNCTION_PARAMS(int n, bool recursion, default false,
+            bind& output) {
+        int result = 0;
+
+        if (n < 2 ) result = 1;
+        else result = n * factorial(n - 1, true); // Recursive call.
+
+        if (!recursion) output << result << " ";
+        return result;
+    } BOOST_LOCAL_FUNCTION_NAME(factorial)
+
+    std::vector<int> v(3);
+    v[0] = 1; v[1] = 4; v[2] = 7;
+    std::for_each(v.begin(), v.end(), factorial);
+
+    std::cout << output.str() << std::endl;
+    return 0;
+}
+//]
+
Modified: sandbox/local/libs/local/simpler_syntax/TODO.txt
==============================================================================
--- sandbox/local/libs/local/simpler_syntax/TODO.txt	(original)
+++ sandbox/local/libs/local/simpler_syntax/TODO.txt	2011-02-20 14:30:28 EST (Sun, 20 Feb 2011)
@@ -14,6 +14,14 @@
 
 * Provide bound parameter types within the body (via private typdefs in the functor class) as `BOUND_PARAM_NAME>_type` -- these can be used for concept checking, etc. Actually, provide access to the bind types via a macro BOOST_LOCAL_TYPEOF() so to hide the type name and to strip eventual const& (Vicente's idea).
 
+* In docs that local functions cannot appear on same line (because __LINE__ is used to generate unique symbols).
+
+* Ask Paul why nil-seq are not part of pp-lib.
+
+* Try to use PP_LIST instead of nil-seq.
+
+* Ask (Paul) for interest in addition PP_KEYWORD to pp-lib.
+
 * Rename is_xxx.hpp to xxx.hpp for all PP_KEYWORD and add REMOVE and ADD macros:
 > #include <boost/preprocessor.hpp>
 > #include <boost/preprocessor/detail/is_unary.hpp>
@@ -43,6 +51,22 @@
 > ADD_AUTO(int x) // auto int x
 The names should actually be AUTO_IN_FRONT, AUTO_ADD_FRONT, AUTO_REMOVE_FRONT, AUTO_IN_BACK, AUTO_ADD_BACK, AUTO_REMOVE_BACK (the general stuff could go into keyword/utility/in.hpp, add.hpp, remove.hpp).
 
+* Add to docs that this can never be bound by ref (as in C++).
+
+* Add to docs that MSVC is not C99 because it does not support empty params (so `()` can't be used for empty params and `void` -- or `(void)` -- should be used. However, MSVC supports variadics you can use `..., ...` to separate params instead of parenthesis `(...)...`.
+
+* Add to docs that if `, default ...` syntax seems strange for C99, programmers can always #define and use the following macro (or somenthing similar).
+> #define WITH_DEFAULT(x) , default x
+
+
+
+* Try seriously to make nested locals to work...
+
+* Add to docs that object `this` can never be bound by reference `&this` (as usual in C++ it is not legal to get a reference to the `this` pointer).
+
+* Make sure that non of the binding (outside and inside the functor) code is generated when no param is bound.
+
+* Rename `function_base` to `abstract_function` (because it's abstract) and `function_ref` to `function` (as for Boost.Function because it's no longer a ref since it can be init empty and uses ptr internally).
 
 
 * Send comments on variadic_macro_data:
Modified: sandbox/local/libs/local/simpler_syntax/factorial_nomacros.07.cpp
==============================================================================
--- sandbox/local/libs/local/simpler_syntax/factorial_nomacros.07.cpp	(original)
+++ sandbox/local/libs/local/simpler_syntax/factorial_nomacros.07.cpp	2011-02-20 14:30:28 EST (Sun, 20 Feb 2011)
@@ -9,6 +9,7 @@
 
 //[ factorial_cpp
 #include <boost/local/function.hpp>
+#include <boost/type_tratis.hpp>
 #include <iostream>
 #include <sstream>
 #include <algorithm>
@@ -110,7 +111,7 @@
                 , arg_0, arg_1 
             ); 
         }
-        // Overloading to support default parameters.
+        // Overloads to support default parameters.
         result_type_29 operator()(arg_type_0_29 arg_0) { 
             assert(binds_);
             return body(
@@ -186,11 +187,10 @@
         // outside the expansion of the PARAMS macro (where the PARAMS symbols
         // are no longer available because of the different __LINE__ number).
         functor_type factorial;
-    } functor_factorial_31(boost_local_auxXargs.value);
+    } functor_factorial(boost_local_auxXargs.value);
     // The struct type cannot be passed as template parameter but the function
     // type `function_ref<...>` deduced here can.
-    BOOST_TYPEOF(functor_factorial_31.factorial) factorial(
-            functor_factorial_31);
+    BOOST_TYPEOF(functor_factorial.factorial) factorial(functor_factorial);
     
     // Rest of the program.