Menu

CompileErrors.h

Go to the documentation of this file.
00001 /*******************************************************************************
00002  *
00003  * Copyright (c) 2008-2010 Michael Schulze <mschulze@ivs.cs.uni-magdeburg.de>
00004  * All rights reserved.
00005  *
00006  *    Redistribution and use in source and binary forms, with or without
00007  *    modification, are permitted provided that the following conditions
00008  *    are met:
00009  *
00010  *    * Redistributions of source code must retain the above copyright
00011  *      notice, this list of conditions and the following disclaimer.
00012  *
00013  *    * Redistributions in binary form must reproduce the above copyright
00014  *      notice, this list of conditions and the following disclaimer in
00015  *      the documentation and/or other materials provided with the
00016  *      distribution.
00017  *
00018  *    * Neither the name of the copyright holders nor the names of
00019  *      contributors may be used to endorse or promote products derived
00020  *      from this software without specific prior written permission.
00021  *
00022  *
00023  *    THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS
00024  *    IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
00025  *    TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A
00026  *    PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
00027  *    OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
00028  *    SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
00029  *    LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
00030  *    DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
00031  *    THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
00032  *    (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
00033  *    OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
00034  *
00035  *
00036  * $Id$
00037  *
00038  ******************************************************************************/
00039 #ifndef __AttributeFilterGrammarCompileErrors_h__
00040 #define __AttributeFilterGrammarCompileErrors_h__
00041 
00042 #include "assert/staticerror.h"
00043 
00044 #include "mw/attributes/tags/AttributeTag.h"
00045 #include "mw/attributes/tags/SameTag.h"
00046 #include "mw/attributes/tags/CompareDifferentAttributesTag.h"
00047 
00048 namespace famouso {
00049     namespace mw {
00050         namespace attributes {
00051 
00058             template <typename T, typename U, typename V=int>
00059             struct CompileError {
00060                 typedef CompileError    type;
00061                 // this will be triggered if this type is instantiated
00062                 FAMOUSO_STATIC_ASSERT_ERROR(
00063                     sizeof(T) == 0,
00064                     generic_CompileError_from_attribute_framework,
00065                     ()
00066                 );
00067             };
00068 
00072             template <typename T, typename U>
00073             struct CompileError<T, U, tags::same_tag> {
00074                 typedef CompileError    type;
00075                 // this will be triggered if this type is instantiated
00076                 FAMOUSO_STATIC_ASSERT_ERROR(
00077                     sizeof(T) == 0,
00078                     attribute_requires_comparison_with_attributes_of_the_same_type_only,
00079                     (T,U)
00080                 );
00081             };
00082 
00086             template <typename T>
00087             struct CompileError<T, tags::attribute_tag> {
00088                typedef CompileError    type;
00089                // this will be triggered if this type is instantiated
00090                FAMOUSO_STATIC_ASSERT_ERROR(
00091                    sizeof(T) == 0,
00092                    template_argument_complies_not_the_attribute_grammar_thus_it_seems_to_be_not_a_valid_attribute,
00093                    (T)
00094                );
00095             };
00096 
00100             template <typename T, typename U>
00101             struct CompileError<T, U, tags::compare_different_attributes_tag> {
00102                 typedef CompileError    type;
00103                 // this will be triggered if this type is instantiated
00104                 FAMOUSO_STATIC_ASSERT_ERROR(
00105                     sizeof(T) == 0,
00106                     comparing_different_attribute_types_are_not_allowed_by_the_attribute_grammar,
00107                     (T,U)
00108                 );
00109             };
00110 
00111         }
00112     }
00113 }
00114 #endif
00115