working on the command line doc
diff --git a/.travis.yml b/.travis.yml
index 9a5a139..f08da44 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,352 +1,353 @@
-sudo: false
-language: c++
-
-notifications:
-  email:
-    on_success: change
-    on_failure: always
-  # gitter
-  webhooks:
-    urls: https://webhooks.gitter.im/e/10941dd1c67e5e967706
-    on_success: change
-    on_failure: always
-git:
-  depth: 5
-
-# both apt and ccache make the builds slower...
-#cache:
-#  - apt
-#  - ccache
-
-env:
-  global:
-#    - USE_CCACHE=1
-#    - CCACHE_SLOPPINESS=pch_defines,time_macros
-#    - CCACHE_COMPRESS=1
-#    - CCACHE_MAXSIZE=200M
-#    - CCACHE_CPP2=1
-    - CMAKE_OPTIONS_GLOBAL="-DCMAKE_EXPORT_COMPILE_COMMANDS=ON"
-  # Workaround for https://github.com/travis-ci/travis-ci/issues/4681
-  # "Defining the build matrix only with matrix.include leads to an additional, unwanted job"
-  matrix:
-    - TRAVIS_EMPTY_JOB_WORKAROUND=true
-
-addons:
-  coverity_scan:
-    # COVERITY_SCAN_TOKEN added as env var in travis project
-    project:
-      name: onqtam/doctest
-    notification_email: vik.kirilov@gmail.com
-    build_command_prepend: cd examples/hello_world && cmake .
-    build_command: make
-    branch_pattern: coverity_scan
-  # these apt sources will be referenced later (by using *name)
-  apt:
-    sources: &apt_sources
-      - ubuntu-toolchain-r-test
-      - llvm-toolchain-precise-3.5
-      - llvm-toolchain-precise-3.6
-      - llvm-toolchain-precise-3.7
-      - llvm-toolchain-precise-3.8
-      - llvm-toolchain-precise
-
-compiler: clang
-os: linux
-
-matrix:
-  exclude:
-    - env: TRAVIS_EMPTY_JOB_WORKAROUND=true
-
-  include:
-    # coverage
-    - env: COMPILER=g++ COVERALLS_SERVICE_NAME=travis-ci
-      compiler: gcc
-      addons:
-        apt:
-          packages: ["lcov", "curl"]
-
-    # GCC 4.4
-    - env: COMPILER=g++-4.4
-      compiler: gcc
-      addons: &gcc44
-        apt:
-          packages: ["g++-4.4", "valgrind", "g++-4.4-multilib", "libc6-dbg", "libc6-dbg:i386"]
-          sources: *apt_sources
-
-    # GCC 4.5
-    - env: COMPILER=g++-4.5
-      compiler: gcc
-      addons: &gcc45
-        apt:
-          packages: ["g++-4.5", "valgrind", "g++-4.5-multilib", "libc6-dbg", "libc6-dbg:i386"]
-          sources: *apt_sources
-
-    # GCC 4.6
-    - env: COMPILER=g++-4.6
-      compiler: gcc
-      addons: &gcc46
-        apt:
-          packages: [           "valgrind", "g++-4.6-multilib", "libc6-dbg", "libc6-dbg:i386"]
-          sources: *apt_sources
-
-    # GCC 4.7
-    - env: COMPILER=g++-4.7
-      compiler: gcc
-      addons: &gcc47
-        apt:
-          packages: ["g++-4.7", "valgrind", "g++-4.7-multilib", "libc6-dbg", "libc6-dbg:i386"]
-          sources: *apt_sources
-
-    # GCC 4.8
-    - env: COMPILER=g++-4.8 HAS_ASAN_32=true HAS_ASAN_64=true
-      compiler: gcc
-      addons: &gcc48
-        apt:
-          packages: ["g++-4.8", "valgrind", "g++-4.8-multilib", "libc6-dbg", "libc6-dbg:i386"]
-          sources: *apt_sources
-
-    # GCC 4.9
-    - env: COMPILER=g++-4.9 HAS_ASAN_32=true HAS_UBSAN_32=true HAS_ASAN_64=true HAS_UBSAN_64=true
-      compiler: gcc
-      addons: &gcc49
-        apt:
-          packages: ["g++-4.9", "valgrind", "g++-4.9-multilib", "libc6-dbg", "libc6-dbg:i386"]
-          sources: *apt_sources
-
-    # GCC 5
-    - env: COMPILER=g++-5 HAS_ASAN_32=true HAS_UBSAN_32=true HAS_ASAN_64=true HAS_UBSAN_64=true
-      compiler: gcc
-      addons: &gcc5
-        apt:
-          packages: ["g++-5",   "valgrind", "g++-5-multilib",   "libc6-dbg", "libc6-dbg:i386"]
-          sources: *apt_sources
-
-#    # GCC 6
-#    # released on 2016.04.27
-#    # wait for it to enter the whitelist - https://github.com/travis-ci/apt-package-whitelist/blob/master/ubuntu-precise
-#    # also with homebrew under OSX!!!
-#    - env: COMPILER=g++-6 HAS_ASAN_32=true HAS_UBSAN_32=true HAS_ASAN_64=true HAS_UBSAN_64=true
+#sudo: false
+#language: c++
+#
+#notifications:
+#  email:
+#    on_success: change
+#    on_failure: always
+#  # gitter
+#  webhooks:
+#    urls: https://webhooks.gitter.im/e/10941dd1c67e5e967706
+#    on_success: change
+#    on_failure: always
+#git:
+#  depth: 5
+#
+## both apt and ccache make the builds slower...
+##cache:
+##  - apt
+##  - ccache
+#
+#env:
+#  global:
+##    - USE_CCACHE=1
+##    - CCACHE_SLOPPINESS=pch_defines,time_macros
+##    - CCACHE_COMPRESS=1
+##    - CCACHE_MAXSIZE=200M
+##    - CCACHE_CPP2=1
+#    - CMAKE_OPTIONS_GLOBAL="-DCMAKE_EXPORT_COMPILE_COMMANDS=ON"
+#  # Workaround for https://github.com/travis-ci/travis-ci/issues/4681
+#  # "Defining the build matrix only with matrix.include leads to an additional, unwanted job"
+#  matrix:
+#    - TRAVIS_EMPTY_JOB_WORKAROUND=true
+#
+#addons:
+#  coverity_scan:
+#    # COVERITY_SCAN_TOKEN added as env var in travis project
+#    project:
+#      name: onqtam/doctest
+#    notification_email: vik.kirilov@gmail.com
+#    build_command_prepend: cd examples/hello_world && cmake .
+#    build_command: make
+#    branch_pattern: coverity_scan
+#  # these apt sources will be referenced later (by using *name)
+#  apt:
+#    sources: &apt_sources
+#      - ubuntu-toolchain-r-test
+#      - llvm-toolchain-precise-3.5
+#      - llvm-toolchain-precise-3.6
+#      - llvm-toolchain-precise-3.7
+#      - llvm-toolchain-precise-3.8
+#      - llvm-toolchain-precise
+#
+#compiler: clang
+#os: linux
+#
+#matrix:
+#  exclude:
+#    - env: TRAVIS_EMPTY_JOB_WORKAROUND=true
+#
+#  include:
+#    # coverage
+#    - env: COMPILER=g++ COVERALLS_SERVICE_NAME=travis-ci
 #      compiler: gcc
-#      addons: &gcc6
+#      addons:
 #        apt:
-#          packages: ["g++-6",   "valgrind", "g++-6-multilib",   "libc6-dbg", "libc6-dbg:i386"]
+#          packages: ["lcov", "curl"]
+#
+#    # GCC 4.4
+#    - env: COMPILER=g++-4.4
+#      compiler: gcc
+#      addons: &gcc44
+#        apt:
+#          packages: ["g++-4.4", "valgrind", "g++-4.4-multilib", "libc6-dbg", "libc6-dbg:i386"]
 #          sources: *apt_sources
-
-    # Clang 3.4
-    - env: COMPILER=clang++ HAS_ASAN_64=true HAS_UBSAN_64=true
-      addons: &clang
-        apt:
-          packages: [             "valgrind", "g++-multilib", "libc6-dbg", "libc6-dbg:i386"]
-          sources: *apt_sources
-
-    # Clang 3.5
-    - env: COMPILER=clang++-3.5 HAS_ASAN_64=true HAS_UBSAN_64=true
-      addons: &clang35
-        apt:
-          packages: ["clang-3.5", "valgrind", "g++-multilib", "libc6-dbg", "libc6-dbg:i386"]
-          sources: *apt_sources
-
-    # Clang 3.6
-    - env: COMPILER=clang++-3.6 HAS_ASAN_64=true HAS_UBSAN_64=true
-      addons: &clang36
-        apt:
-          packages: ["clang-3.6", "valgrind", "g++-multilib", "libc6-dbg", "libc6-dbg:i386"]
-          sources: *apt_sources
-
-    # Clang 3.7
-    - env: COMPILER=clang++-3.7 # no sanitizers - not even for 64 bit - https://llvm.org/bugs/show_bug.cgi?id=22757
-      addons: &clang37
-        apt:
-          packages: ["clang-3.7", "valgrind", "g++-multilib", "libc6-dbg", "libc6-dbg:i386"]
-          sources: *apt_sources
-
-    # Clang 3.8
-    - env: COMPILER=clang++-3.8 # no sanitizers - not even for 64 bit - https://llvm.org/bugs/show_bug.cgi?id=22757
-      addons: &clang38
-        apt:
-          packages: ["clang-3.8", "valgrind", "g++-multilib", "libc6-dbg", "libc6-dbg:i386"]
-          sources: *apt_sources
-
-    # Xcode 6.1 Clang
-    - env: COMPILER=clang++
-      os: osx
-
-    # Xcode 6.2 Clang
-    - env: COMPILER=clang++
-      osx_image: beta-xcode6.2
-      os: osx
-
-    # Xcode 6.3 Clang
-    - env: COMPILER=clang++
-      osx_image: beta-xcode6.3
-      os: osx
-
-    # Xcode 6.4 Clang
-    - env: COMPILER=clang++
-      osx_image: xcode6.4
-      os: osx
-
-    # Xcode 7 Clang
-    - env: COMPILER=clang++ HAS_ASAN_32=true HAS_ASAN_64=true
-      osx_image: xcode7
-      os: osx
-
-    # Xcode 7.1 Clang
-    - env: COMPILER=clang++ HAS_ASAN_32=true HAS_ASAN_64=true
-      osx_image: xcode7.1
-      os: osx
-
-    # Xcode 7.2 Clang
-    - env: COMPILER=clang++ HAS_ASAN_32=true HAS_ASAN_64=true
-      osx_image: xcode7.2
-      os: osx
-
-    # Xcode 7.3 Clang
-    - env: COMPILER=clang++ HAS_ASAN_32=true HAS_ASAN_64=true
-      osx_image: xcode7.3
-      os: osx
-
-    # OSX GCC 4.4
-    - env: COMPILER=g++-4.4
-      compiler: gcc
-      os: osx
-
-    # OSX GCC 4.5
-    - env: COMPILER=g++-4.5
-      compiler: gcc
-      os: osx
-
-    # OSX GCC 4.6
-    - env: COMPILER=g++-4.6
-      compiler: gcc
-      os: osx
-
-    # OSX GCC 4.7
-    - env: COMPILER=g++-4.7
-      compiler: gcc
-      os: osx
-
-    # OSX GCC 4.8
-    - env: COMPILER=g++-4.8 HAS_ASAN_32=true HAS_ASAN_64=true
-      compiler: gcc
-      os: osx
-
-    # OSX GCC 4.9
-    - env: COMPILER=g++-4.9 HAS_ASAN_32=true HAS_UBSAN_32=true HAS_ASAN_64=true HAS_UBSAN_64=true
-      compiler: gcc
-      os: osx
-
-    # OSX GCC 5
-    - env: COMPILER=g++-5 HAS_ASAN_32=true HAS_UBSAN_32=true HAS_ASAN_64=true HAS_UBSAN_64=true
-      compiler: gcc
-      os: osx
-
-#    # OSX GCC 6
-#    - env: COMPILER=g++-6 HAS_ASAN_32=true HAS_UBSAN_32=true HAS_ASAN_64=true HAS_UBSAN_64=true
+#
+#    # GCC 4.5
+#    - env: COMPILER=g++-4.5
+#      compiler: gcc
+#      addons: &gcc45
+#        apt:
+#          packages: ["g++-4.5", "valgrind", "g++-4.5-multilib", "libc6-dbg", "libc6-dbg:i386"]
+#          sources: *apt_sources
+#
+#    # GCC 4.6
+#    - env: COMPILER=g++-4.6
+#      compiler: gcc
+#      addons: &gcc46
+#        apt:
+#          packages: [           "valgrind", "g++-4.6-multilib", "libc6-dbg", "libc6-dbg:i386"]
+#          sources: *apt_sources
+#
+#    # GCC 4.7
+#    - env: COMPILER=g++-4.7
+#      compiler: gcc
+#      addons: &gcc47
+#        apt:
+#          packages: ["g++-4.7", "valgrind", "g++-4.7-multilib", "libc6-dbg", "libc6-dbg:i386"]
+#          sources: *apt_sources
+#
+#    # GCC 4.8
+#    - env: COMPILER=g++-4.8 HAS_ASAN_32=true HAS_ASAN_64=true
+#      compiler: gcc
+#      addons: &gcc48
+#        apt:
+#          packages: ["g++-4.8", "valgrind", "g++-4.8-multilib", "libc6-dbg", "libc6-dbg:i386"]
+#          sources: *apt_sources
+#
+#    # GCC 4.9
+#    - env: COMPILER=g++-4.9 HAS_ASAN_32=true HAS_UBSAN_32=true HAS_ASAN_64=true HAS_UBSAN_64=true
+#      compiler: gcc
+#      addons: &gcc49
+#        apt:
+#          packages: ["g++-4.9", "valgrind", "g++-4.9-multilib", "libc6-dbg", "libc6-dbg:i386"]
+#          sources: *apt_sources
+#
+#    # GCC 5
+#    - env: COMPILER=g++-5 HAS_ASAN_32=true HAS_UBSAN_32=true HAS_ASAN_64=true HAS_UBSAN_64=true
+#      compiler: gcc
+#      addons: &gcc5
+#        apt:
+#          packages: ["g++-5",   "valgrind", "g++-5-multilib",   "libc6-dbg", "libc6-dbg:i386"]
+#          sources: *apt_sources
+#
+##    # GCC 6
+##    # released on 2016.04.27
+##    # wait for it to enter the whitelist - https://github.com/travis-ci/apt-package-whitelist/blob/master/ubuntu-precise
+##    # also with homebrew under OSX!!!
+##    - env: COMPILER=g++-6 HAS_ASAN_32=true HAS_UBSAN_32=true HAS_ASAN_64=true HAS_UBSAN_64=true
+##      compiler: gcc
+##      addons: &gcc6
+##        apt:
+##          packages: ["g++-6",   "valgrind", "g++-6-multilib",   "libc6-dbg", "libc6-dbg:i386"]
+##          sources: *apt_sources
+#
+#    # Clang 3.4
+#    - env: COMPILER=clang++ HAS_ASAN_64=true HAS_UBSAN_64=true
+#      addons: &clang
+#        apt:
+#          packages: [             "valgrind", "g++-multilib", "libc6-dbg", "libc6-dbg:i386"]
+#          sources: *apt_sources
+#
+#    # Clang 3.5
+#    - env: COMPILER=clang++-3.5 HAS_ASAN_64=true HAS_UBSAN_64=true
+#      addons: &clang35
+#        apt:
+#          packages: ["clang-3.5", "valgrind", "g++-multilib", "libc6-dbg", "libc6-dbg:i386"]
+#          sources: *apt_sources
+#
+#    # Clang 3.6
+#    - env: COMPILER=clang++-3.6 HAS_ASAN_64=true HAS_UBSAN_64=true
+#      addons: &clang36
+#        apt:
+#          packages: ["clang-3.6", "valgrind", "g++-multilib", "libc6-dbg", "libc6-dbg:i386"]
+#          sources: *apt_sources
+#
+#    # Clang 3.7
+#    - env: COMPILER=clang++-3.7 # no sanitizers - not even for 64 bit - https://llvm.org/bugs/show_bug.cgi?id=22757
+#      addons: &clang37
+#        apt:
+#          packages: ["clang-3.7", "valgrind", "g++-multilib", "libc6-dbg", "libc6-dbg:i386"]
+#          sources: *apt_sources
+#
+#    # Clang 3.8
+#    - env: COMPILER=clang++-3.8 # no sanitizers - not even for 64 bit - https://llvm.org/bugs/show_bug.cgi?id=22757
+#      addons: &clang38
+#        apt:
+#          packages: ["clang-3.8", "valgrind", "g++-multilib", "libc6-dbg", "libc6-dbg:i386"]
+#          sources: *apt_sources
+#
+#    # Xcode 6.1 Clang
+#    - env: COMPILER=clang++
+#      os: osx
+#
+#    # Xcode 6.2 Clang
+#    - env: COMPILER=clang++
+#      osx_image: beta-xcode6.2
+#      os: osx
+#
+#    # Xcode 6.3 Clang
+#    - env: COMPILER=clang++
+#      osx_image: beta-xcode6.3
+#      os: osx
+#
+#    # Xcode 6.4 Clang
+#    - env: COMPILER=clang++
+#      osx_image: xcode6.4
+#      os: osx
+#
+#    # Xcode 7 Clang
+#    - env: COMPILER=clang++ HAS_ASAN_32=true HAS_ASAN_64=true
+#      osx_image: xcode7
+#      os: osx
+#
+#    # Xcode 7.1 Clang
+#    - env: COMPILER=clang++ HAS_ASAN_32=true HAS_ASAN_64=true
+#      osx_image: xcode7.1
+#      os: osx
+#
+#    # Xcode 7.2 Clang
+#    - env: COMPILER=clang++ HAS_ASAN_32=true HAS_ASAN_64=true
+#      osx_image: xcode7.2
+#      os: osx
+#
+#    # Xcode 7.3 Clang
+#    - env: COMPILER=clang++ HAS_ASAN_32=true HAS_ASAN_64=true
+#      osx_image: xcode7.3
+#      os: osx
+#
+#    # OSX GCC 4.4
+#    - env: COMPILER=g++-4.4
 #      compiler: gcc
 #      os: osx
-
-    # OSX LLVM-GCC
-    - env: COMPILER=g++
-      compiler: gcc
-      os: osx
-
-before_install:
-  - |
-    if [[ "${TRAVIS_OS_NAME}" == "osx" ]]; then
-      brew update
-      # brew install ccache
-      brew install valgrind
-      # cmake
-      if brew list -1 | grep -q "^cmake\$"; then
-        brew outdated cmake || brew upgrade cmake
-      else
-        brew install cmake
-      fi
-      # gcc
-      if [[ "${COMPILER}" = "g++-4.4" ]]; then
-        brew install gcc44
-      fi
-      if [[ "${COMPILER}" = "g++-4.5" ]]; then
-        brew install gcc45
-      fi
-      if [[ "${COMPILER}" = "g++-4.6" ]]; then
-        brew install gcc46
-      fi
-      if [[ "${COMPILER}" = "g++-4.7" ]]; then
-        brew install gcc47
-      fi
-      if [[ "${COMPILER}" = "g++-4.8" ]]; then
-        brew outdated gcc48 || brew upgrade gcc48
-      fi
-      if [[ "${COMPILER}" = "g++-4.9" ]]; then
-        brew install gcc49
-      fi
-      if [[ "${COMPILER}" = "g++-5" ]]; then
-        brew install gcc5
-      fi
-      if [[ "${COMPILER}" = "g++-6" ]]; then
-        brew install gcc6
-      fi
-    fi
-  - git submodule update --init --recursive
-
-install:
-  - ${CXX} --version
-#  - export CXX="ccache ${COMPILER}"
-  - export CXX="${COMPILER}"
-  - ${CXX} --version
-#  - ccache -s
-
-script:
-  # coverage - do not continue with other build configurations after that
-  - |
-    if [[ "${COVERALLS_SERVICE_NAME}" = "travis-ci" ]]; then
-      cmake ${CMAKE_OPTIONS_GLOBAL} -DCMAKE_BUILD_TYPE=Debug .
-      make -j2 && make coveralls
-      exit
-    fi
-
-  # initial run with options
-  - cmake ${CMAKE_OPTIONS_GLOBAL} ${CMAKE_OPTIONS} .
-
-  # debug x86
-  - cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-m32" .
-  - make clean && make -j2
-  # valgrind for 32bit under osx fails
-  - if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then cmake -DTEST_MODE=VALGRIND . && ctest --output-on-failure ; fi
-#  - cmake -DTEST_MODE=COMPARE . && ctest --output-on-failure
-  # debug x64
-  - cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-m64" .
-  - make clean && make -j2
-  - cmake -DTEST_MODE=VALGRIND . && ctest --output-on-failure
-#  - cmake -DTEST_MODE=COMPARE . && ctest --output-on-failure
-  # release x86
-  - cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-m32" .
-  - make clean && make -j2
-  # valgrind for 32bit under osx fails
-  - if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then cmake -DTEST_MODE=VALGRIND . && ctest --output-on-failure ; fi
-#  - cmake -DTEST_MODE=COMPARE . && ctest --output-on-failure
-  # release x64
-  - cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-m64" .
-  - make clean && make -j2
-  - cmake -DTEST_MODE=VALGRIND . && ctest --output-on-failure
-#  - cmake -DTEST_MODE=COMPARE . && ctest --output-on-failure
-
-  # sanitizers - again 32/64 bit Debug/Release configs through address/undefined sanitizers
-  - cmake -DTEST_MODE=NORMAL .
-#  - cmake -DTEST_MODE=COMPARE .
-  # on separate commands because when something fails I want to see which one exactly
-  - if [[ "${HAS_ASAN_64}" = "true" ]];  then cmake -DCMAKE_BUILD_TYPE=Debug   -DCMAKE_CXX_FLAGS="-m64 -fsanitize=address" .   && make clean && make -j2 && ctest --output-on-failure ; fi
-  - if [[ "${HAS_ASAN_32}" = "true" ]];  then cmake -DCMAKE_BUILD_TYPE=Debug   -DCMAKE_CXX_FLAGS="-m32 -fsanitize=address" .   && make clean && make -j2 && ctest --output-on-failure ; fi
-  - if [[ "${HAS_ASAN_64}" = "true" ]];  then cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-m64 -fsanitize=address" .   && make clean && make -j2 && ctest --output-on-failure ; fi
-  - if [[ "${HAS_ASAN_32}" = "true" ]];  then cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-m32 -fsanitize=address" .   && make clean && make -j2 && ctest --output-on-failure ; fi
-  - if [[ "${HAS_UBSAN_64}" = "true" ]]; then cmake -DCMAKE_BUILD_TYPE=Debug   -DCMAKE_CXX_FLAGS="-m64 -fsanitize=undefined" . && make clean && make -j2 && ctest --output-on-failure ; fi
-  - if [[ "${HAS_UBSAN_32}" = "true" ]]; then cmake -DCMAKE_BUILD_TYPE=Debug   -DCMAKE_CXX_FLAGS="-m32 -fsanitize=undefined" . && make clean && make -j2 && ctest --output-on-failure ; fi
-  - if [[ "${HAS_UBSAN_64}" = "true" ]]; then cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-m64 -fsanitize=undefined" . && make clean && make -j2 && ctest --output-on-failure ; fi
-  - if [[ "${HAS_UBSAN_32}" = "true" ]]; then cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-m32 -fsanitize=undefined" . && make clean && make -j2 && ctest --output-on-failure ; fi
-
-#  - ccache -s
-
-after_script:
-  - cat compile_commands.json
+#
+#    # OSX GCC 4.5
+#    - env: COMPILER=g++-4.5
+#      compiler: gcc
+#      os: osx
+#
+#    # OSX GCC 4.6
+#    - env: COMPILER=g++-4.6
+#      compiler: gcc
+#      os: osx
+#
+#    # OSX GCC 4.7
+#    - env: COMPILER=g++-4.7
+#      compiler: gcc
+#      os: osx
+#
+#    # OSX GCC 4.8
+#    - env: COMPILER=g++-4.8 HAS_ASAN_32=true HAS_ASAN_64=true
+#      compiler: gcc
+#      os: osx
+#
+#    # OSX GCC 4.9
+#    - env: COMPILER=g++-4.9 HAS_ASAN_32=true HAS_UBSAN_32=true HAS_ASAN_64=true HAS_UBSAN_64=true
+#      compiler: gcc
+#      os: osx
+#
+#    # OSX GCC 5
+#    - env: COMPILER=g++-5 HAS_ASAN_32=true HAS_UBSAN_32=true HAS_ASAN_64=true HAS_UBSAN_64=true
+#      compiler: gcc
+#      os: osx
+#
+##    # OSX GCC 6
+##    - env: COMPILER=g++-6 HAS_ASAN_32=true HAS_UBSAN_32=true HAS_ASAN_64=true HAS_UBSAN_64=true
+##      compiler: gcc
+##      os: osx
+#
+#    # OSX LLVM-GCC
+#    - env: COMPILER=g++
+#      compiler: gcc
+#      os: osx
+#
+#before_install:
+#  - |
+#    if [[ "${TRAVIS_OS_NAME}" == "osx" ]]; then
+#      brew update
+#      # brew install ccache
+#      brew install valgrind
+#      # cmake
+#      if brew list -1 | grep -q "^cmake\$"; then
+#        brew outdated cmake || brew upgrade cmake
+#      else
+#        brew install cmake
+#      fi
+#      # gcc
+#      if [[ "${COMPILER}" = "g++-4.4" ]]; then
+#        brew install gcc44
+#      fi
+#      if [[ "${COMPILER}" = "g++-4.5" ]]; then
+#        brew install gcc45
+#      fi
+#      if [[ "${COMPILER}" = "g++-4.6" ]]; then
+#        brew install gcc46
+#      fi
+#      if [[ "${COMPILER}" = "g++-4.7" ]]; then
+#        brew install gcc47
+#      fi
+#      if [[ "${COMPILER}" = "g++-4.8" ]]; then
+#        brew outdated gcc48 || brew upgrade gcc48
+#      fi
+#      if [[ "${COMPILER}" = "g++-4.9" ]]; then
+#        brew install gcc49
+#      fi
+#      if [[ "${COMPILER}" = "g++-5" ]]; then
+#        brew install gcc5
+#      fi
+#      if [[ "${COMPILER}" = "g++-6" ]]; then
+#        brew install gcc6
+#      fi
+#    fi
+#  - git submodule update --init --recursive
+#
+#install:
+#  - ${CXX} --version
+##  - export CXX="ccache ${COMPILER}"
+#  - export CXX="${COMPILER}"
+#  - ${CXX} --version
+##  - ccache -s
+#
+#script:
+#  # coverage - do not continue with other build configurations after that
+#  - |
+#    if [[ "${COVERALLS_SERVICE_NAME}" = "travis-ci" ]]; then
+#      cmake ${CMAKE_OPTIONS_GLOBAL} -DCMAKE_BUILD_TYPE=Debug .
+#      make -j2 && make coveralls
+#      exit
+#    fi
+#
+#  # initial run with options
+#  - cmake ${CMAKE_OPTIONS_GLOBAL} ${CMAKE_OPTIONS} .
+#
+#  # debug x86
+#  - cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-m32" .
+#  - make clean && make -j2
+#  # valgrind for 32bit under osx fails
+#  - if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then cmake -DTEST_MODE=VALGRIND . && ctest --output-on-failure ; fi
+##  - cmake -DTEST_MODE=COMPARE . && ctest --output-on-failure
+#  # debug x64
+#  - cmake -DCMAKE_BUILD_TYPE=Debug -DCMAKE_CXX_FLAGS="-m64" .
+#  - make clean && make -j2
+#  - cmake -DTEST_MODE=VALGRIND . && ctest --output-on-failure
+##  - cmake -DTEST_MODE=COMPARE . && ctest --output-on-failure
+#  # release x86
+#  - cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-m32" .
+#  - make clean && make -j2
+#  # valgrind for 32bit under osx fails
+#  - if [[ "${TRAVIS_OS_NAME}" == "linux" ]]; then cmake -DTEST_MODE=VALGRIND . && ctest --output-on-failure ; fi
+##  - cmake -DTEST_MODE=COMPARE . && ctest --output-on-failure
+#  # release x64
+#  - cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-m64" .
+#  - make clean && make -j2
+#  - cmake -DTEST_MODE=VALGRIND . && ctest --output-on-failure
+##  - cmake -DTEST_MODE=COMPARE . && ctest --output-on-failure
+#
+#  # sanitizers - again 32/64 bit Debug/Release configs through address/undefined sanitizers
+#  - cmake -DTEST_MODE=NORMAL .
+##  - cmake -DTEST_MODE=COMPARE .
+#  # on separate commands because when something fails I want to see which one exactly
+#  - if [[ "${HAS_ASAN_64}" = "true" ]];  then cmake -DCMAKE_BUILD_TYPE=Debug   -DCMAKE_CXX_FLAGS="-m64 -fsanitize=address" .   && make clean && make -j2 && ctest --output-on-failure ; fi
+#  - if [[ "${HAS_ASAN_32}" = "true" ]];  then cmake -DCMAKE_BUILD_TYPE=Debug   -DCMAKE_CXX_FLAGS="-m32 -fsanitize=address" .   && make clean && make -j2 && ctest --output-on-failure ; fi
+#  - if [[ "${HAS_ASAN_64}" = "true" ]];  then cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-m64 -fsanitize=address" .   && make clean && make -j2 && ctest --output-on-failure ; fi
+#  - if [[ "${HAS_ASAN_32}" = "true" ]];  then cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-m32 -fsanitize=address" .   && make clean && make -j2 && ctest --output-on-failure ; fi
+#  - if [[ "${HAS_UBSAN_64}" = "true" ]]; then cmake -DCMAKE_BUILD_TYPE=Debug   -DCMAKE_CXX_FLAGS="-m64 -fsanitize=undefined" . && make clean && make -j2 && ctest --output-on-failure ; fi
+#  - if [[ "${HAS_UBSAN_32}" = "true" ]]; then cmake -DCMAKE_BUILD_TYPE=Debug   -DCMAKE_CXX_FLAGS="-m32 -fsanitize=undefined" . && make clean && make -j2 && ctest --output-on-failure ; fi
+#  - if [[ "${HAS_UBSAN_64}" = "true" ]]; then cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-m64 -fsanitize=undefined" . && make clean && make -j2 && ctest --output-on-failure ; fi
+#  - if [[ "${HAS_UBSAN_32}" = "true" ]]; then cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_CXX_FLAGS="-m32 -fsanitize=undefined" . && make clean && make -j2 && ctest --output-on-failure ; fi
+#
+##  - ccache -s
+#
+#after_script:
+#  - cat compile_commands.json
+#
\ No newline at end of file
diff --git a/appveyor.yml b/appveyor.yml
index 9e0b289..ab1e0fb 100644
--- a/appveyor.yml
+++ b/appveyor.yml
@@ -1,117 +1,118 @@
-# http://www.appveyor.com/docs/appveyor-yml

-

-notifications:

-  - provider: Email

-    to:

-      - vik.kirilov@gmail.com

-    on_build_status_changed: true

-    on_build_failure: true

-    on_build_success: false

-  # gitter

-  - provider: Webhook

-    url: https://webhooks.gitter.im/e/3a78202a235c0325e516

-    on_build_status_changed: true

-    on_build_failure: true

-    on_build_success: false

-

-clone_depth: 5

-branches:

-  except:

-    - gh-pages

-    - coverity_scan

-

-matrix:

-  fast_finish: false

-

-environment:

-  matrix:

-  - platform: x86

-    configuration: Debug

-    arch: "Win32"

-    VS_GEN: "Visual Studio 9 2008"

-  - platform: x86

-    configuration: Release

-    arch: "Win32"

-    VS_GEN: "Visual Studio 9 2008"

-## THE FOLLOWING ARE DISABLED BECAUSE CMAKE CANNOT FIND THE COMPILER FOR Win64

+## http://www.appveyor.com/docs/appveyor-yml

+#

+#notifications:

+#  - provider: Email

+#    to:

+#      - vik.kirilov@gmail.com

+#    on_build_status_changed: true

+#    on_build_failure: true

+#    on_build_success: false

+#  # gitter

+#  - provider: Webhook

+#    url: https://webhooks.gitter.im/e/3a78202a235c0325e516

+#    on_build_status_changed: true

+#    on_build_failure: true

+#    on_build_success: false

+#

+#clone_depth: 5

+#branches:

+#  except:

+#    - gh-pages

+#    - coverity_scan

+#

+#matrix:

+#  fast_finish: false

+#

+#environment:

+#  matrix:

+#  - platform: x86

+#    configuration: Debug

+#    arch: "Win32"

+#    VS_GEN: "Visual Studio 9 2008"

+#  - platform: x86

+#    configuration: Release

+#    arch: "Win32"

+#    VS_GEN: "Visual Studio 9 2008"

+### THE FOLLOWING ARE DISABLED BECAUSE CMAKE CANNOT FIND THE COMPILER FOR Win64

+##  - platform: x64

+##    configuration: Debug

+##    arch: "x64"

+##    VS_GEN: "Visual Studio 9 2008 Win64"

+##  - platform: x64

+##    configuration: Release

+##    arch: "x64"

+##    VS_GEN: "Visual Studio 9 2008 Win64"

+#  - platform: x86

+#    configuration: Debug

+#    arch: "Win32"

+#    VS_GEN: "Visual Studio 10 2010"

+#  - platform: x86

+#    configuration: Release

+#    arch: "Win32"

+#    VS_GEN: "Visual Studio 10 2010"

 #  - platform: x64

 #    configuration: Debug

 #    arch: "x64"

-#    VS_GEN: "Visual Studio 9 2008 Win64"

+#    VS_GEN: "Visual Studio 10 2010 Win64"

 #  - platform: x64

 #    configuration: Release

 #    arch: "x64"

-#    VS_GEN: "Visual Studio 9 2008 Win64"

-  - platform: x86

-    configuration: Debug

-    arch: "Win32"

-    VS_GEN: "Visual Studio 10 2010"

-  - platform: x86

-    configuration: Release

-    arch: "Win32"

-    VS_GEN: "Visual Studio 10 2010"

-  - platform: x64

-    configuration: Debug

-    arch: "x64"

-    VS_GEN: "Visual Studio 10 2010 Win64"

-  - platform: x64

-    configuration: Release

-    arch: "x64"

-    VS_GEN: "Visual Studio 10 2010 Win64"

-  - platform: x86

-    configuration: Debug

-    arch: "Win32"

-    VS_GEN: "Visual Studio 11 2012"

-  - platform: x86

-    configuration: Release

-    arch: "Win32"

-    VS_GEN: "Visual Studio 11 2012"

-  - platform: x64

-    configuration: Debug

-    arch: "x64"

-    VS_GEN: "Visual Studio 11 2012 Win64"

-  - platform: x64

-    configuration: Release

-    arch: "x64"

-    VS_GEN: "Visual Studio 11 2012 Win64"

-  - platform: x86

-    configuration: Debug

-    arch: "Win32"

-    VS_GEN: "Visual Studio 12 2013"

-  - platform: x86

-    configuration: Release

-    arch: "Win32"

-    VS_GEN: "Visual Studio 12 2013"

-  - platform: x64

-    configuration: Debug

-    arch: "x64"

-    VS_GEN: "Visual Studio 12 2013 Win64"

-  - platform: x64

-    configuration: Release

-    arch: "x64"

-    VS_GEN: "Visual Studio 12 2013 Win64"

-  - platform: x86

-    configuration: Debug

-    arch: "Win32"

-    VS_GEN: "Visual Studio 14 2015"

-  - platform: x86

-    configuration: Release

-    arch: "Win32"

-    VS_GEN: "Visual Studio 14 2015"

-  - platform: x64

-    configuration: Debug

-    arch: "x64"

-    VS_GEN: "Visual Studio 14 2015 Win64"

-  - platform: x64

-    configuration: Release

-    arch: "x64"

-    VS_GEN: "Visual Studio 14 2015 Win64"

-

-before_build:

-  - cmake . -G "%VS_GEN%"

-build_script:

-  - msbuild all.sln /p:Configuration=%Configuration%;Platform=%arch% /maxcpucount

-test_script:

-# temporarily disabled - output will change often so no need for this yet

-#  - cmake . -DTEST_MODE=COMPARE

-  - ctest -C %configuration% --output-on-failure

+#    VS_GEN: "Visual Studio 10 2010 Win64"

+#  - platform: x86

+#    configuration: Debug

+#    arch: "Win32"

+#    VS_GEN: "Visual Studio 11 2012"

+#  - platform: x86

+#    configuration: Release

+#    arch: "Win32"

+#    VS_GEN: "Visual Studio 11 2012"

+#  - platform: x64

+#    configuration: Debug

+#    arch: "x64"

+#    VS_GEN: "Visual Studio 11 2012 Win64"

+#  - platform: x64

+#    configuration: Release

+#    arch: "x64"

+#    VS_GEN: "Visual Studio 11 2012 Win64"

+#  - platform: x86

+#    configuration: Debug

+#    arch: "Win32"

+#    VS_GEN: "Visual Studio 12 2013"

+#  - platform: x86

+#    configuration: Release

+#    arch: "Win32"

+#    VS_GEN: "Visual Studio 12 2013"

+#  - platform: x64

+#    configuration: Debug

+#    arch: "x64"

+#    VS_GEN: "Visual Studio 12 2013 Win64"

+#  - platform: x64

+#    configuration: Release

+#    arch: "x64"

+#    VS_GEN: "Visual Studio 12 2013 Win64"

+#  - platform: x86

+#    configuration: Debug

+#    arch: "Win32"

+#    VS_GEN: "Visual Studio 14 2015"

+#  - platform: x86

+#    configuration: Release

+#    arch: "Win32"

+#    VS_GEN: "Visual Studio 14 2015"

+#  - platform: x64

+#    configuration: Debug

+#    arch: "x64"

+#    VS_GEN: "Visual Studio 14 2015 Win64"

+#  - platform: x64

+#    configuration: Release

+#    arch: "x64"

+#    VS_GEN: "Visual Studio 14 2015 Win64"

+#

+#before_build:

+#  - cmake . -G "%VS_GEN%"

+#build_script:

+#  - msbuild all.sln /p:Configuration=%Configuration%;Platform=%arch% /maxcpucount

+#test_script:

+## temporarily disabled - output will change often so no need for this yet

+##  - cmake . -DTEST_MODE=COMPARE

+#  - ctest -C %configuration% --output-on-failure

+#
\ No newline at end of file
diff --git a/doc/markdown/commandline.md b/doc/markdown/commandline.md
index f5eaa00..1dab225 100644
--- a/doc/markdown/commandline.md
+++ b/doc/markdown/commandline.md
@@ -1,7 +1,138 @@
 ## Command line

 

-- document how to use spaces for filters in the comma separated list (using "")

-

-what implies no-run

+**doctest** works quite nicely without any command line options at all - but for greater control use the following flags/options:

 

 

+All the flags/options also come with a prefixed version (with ```-dt-``` at the front) - for example ```-rand-seed=<int>``` can be used also with ```-dt-rand-seed=<int>``` or ```-dt-rs=<int>```.

+

+Also all the unprefixed versions listed here can be disabled with the [**```DOCTEST_CONFIG_NO_UNPREFIXED_OPTIONS```**](configuration.md) define.

+

+This is done for easy interoperability with client command line option handling when the testing framework is integrated with a client codebase - all **doctest** related flags/options can be prefixed so there are no clashes and so that the user can exclude everything starting with ```-dt-``` from their option parsing.

+

+Query flags - after the result is printed the program quits without executing any test cases (and if the framework is integrated into a client codebase and supplying it's own ```main()``` entry point - the program should check the result of ```doctest::Context::shouldExit()``` after calling ```doctest::Context::run()``` and should exit - this is left up to the user).

+

+<table><tr><td>

+Query Flags

+</td><td>

+Description

+</td></tr><tr><td>

+```-?,   --help, -h```

+</td><td>

+Prints a help message listing all these flags/options

+</td></tr><tr><td>

+```-v,   --version```

+</td><td>

+Prints the version of the **doctest** framework

+</td></tr><tr><td>

+```-c,   --count```

+</td><td>

+Prints the number of test cases matching the current filters (see below)

+</td></tr><tr><td>

+```-ltc, --list-test-cases```

+</td><td>

+Lists all test cases by name which match the current filters (see below)

+</td></tr><tr><td>

+```-lts, --list-test-suites```

+</td><td>

+Lists all test suites by name which have at least one test case matching the current filters (see below)

+</td></tr></table>

+

+```int```/```string``` options - they require a value after the ```=``` sign - without spaces! For example: ```--order-by=rand```.

+

+Filters use wildcards for matching values - where ```*``` means "match any sequence" and ```?``` means "match any one character".

+

+<table><tr><td>

+Int/String Options

+</td><td>

+Description

+</td></tr><tr><td>

+```-tc,  --test-case=<filters>```

+</td><td>

+Filters test cases based on their name. By default all test cases match but if a value is given to this filter like ```--test-case=*math*,*sound*``` then only test cases who match atleast one of the patterns in the comma-separated list with wildcards will get executed/counted/listed.

+</td></tr><tr><td>

+```-tce, --test-case-exclude=<filters>```

+</td><td>

+same as the ```-test-case=<filters>``` option but if any of the patterns in the comma-separated list of values matches - then the test case is skipped.

+</td></tr><tr><td>

+```-sf,  --source-file=<filters>```

+</td><td>

+filters     tests by their file

+</td></tr><tr><td>

+```-sfe, --source-file-exclude=<filters>```

+</td><td>

+filters OUT tests by their file

+</td></tr><tr><td>

+```-ts,  --test-suite=<filters>```

+</td><td>

+filters     tests by their test suite

+</td></tr><tr><td>

+```-tse, --test-suite-exclude=<filters>```

+</td><td>

+filters OUT tests by their test suite

+</td></tr><tr><td>

+```-ob,  --order-by=<string>```

+</td><td>

+how the tests should be ordered <string> - by [file/suite/name/rand]

+</td></tr><tr><td>

+```-rs,  --rand-seed=<int>```

+</td><td>

+seed for random ordering

+</td></tr><tr><td>

+```-f,   --first=<int>```

+</td><td>

+the first test passing the filters to execute - for range-based execution

+</td></tr><tr><td>

+```-l,   --last=<int>```

+</td><td>

+the last test passing the filters to execute - for range-based execution

+</td></tr><tr><td>

+```-aa,  --abort-after=<int>```

+</td><td>

+stop after <int> failed assertions

+</td></tr></table>

+

+<table><tr><td>

+Bool Options

+</td><td>

+Description

+</td></tr><tr><td>

+```-s,   --success=<bool>```

+</td><td>

+include successful assertions in output

+</td></tr><tr><td>

+```-cs,  --case-sensitive=<bool>```

+</td><td>

+filters being treated as case sensitive

+</td></tr><tr><td>

+```-e,   --exit=<bool>```

+</td><td>

+exits after the tests finish

+</td></tr><tr><td>

+```-no,  --no-overrides=<bool>```

+</td><td>

+disables procedural overrides of options

+</td></tr><tr><td>

+```-nt,  --no-throw=<bool>```

+</td><td>

+skips exceptions-related assert checks

+</td></tr><tr><td>

+```-ne,  --no-exitcode=<bool>```

+</td><td>

+returns (or exits) always with success

+</td></tr><tr><td>

+```-nr,  --no-run=<bool>```

+</td><td>

+skips all runtime doctest operations

+</td></tr><tr><td>

+```-nc,  --no-colors=<bool>```

+</td><td>

+disables colors in output

+</td></tr><tr><td>

+```-nb,  --no-breaks=<bool>```

+</td><td>

+disables breakpoints in debuggers

+</td></tr><tr><td>

+```-npf, --no-path-filenames=<bool>```

+</td><td>

+only filenames and no paths in output

+</td></tr></table>

diff --git a/doc/markdown/features.md b/doc/markdown/features.md
index f80cac5..66ea57e 100644
--- a/doc/markdown/features.md
+++ b/doc/markdown/features.md
@@ -114,7 +114,8 @@
 - pool allocator for the ```String``` class - currently very unoptimized
 - ability to specify ASC/DESC for the order option

 - command line error handling/reporting
-- utf8? not sure if this should be here
+- utf8? not sure if this should be here

+- print a warning when no assertion is encountered in a test case
 - hierarchical test suites - using a stack for the pushed ones - should be easy
 - put everything from the ```detail``` namespace also in a nested anonymous namespace to make them with internal linkage
 - ability to re-run only newly compiled tests based on time stamps using ```__DATE__``` and ```__TIME__``` - stored in some file