Index: src/SynTree/Declaration.h
===================================================================
--- src/SynTree/Declaration.h	(revision 5408b5919f1f591121d6cdabf6c6b5e605e61e6b)
+++ src/SynTree/Declaration.h	(revision e874605d8b0f66ad6050e4d03825b57912afe8ac)
@@ -449,4 +449,29 @@
 };
 
+
+class InlineValueDecl : public DeclarationWithType {
+	typedef DeclarationWithType Parent;
+  public:
+	Type * type;
+
+	InlineValueDecl( const std::string & name, Type::StorageClasses scs, LinkageSpec::Spec linkage, Type * type,
+				const std::list< Attribute * > attributes = std::list< Attribute * >(), Type::FuncSpecifiers fs = Type::FuncSpecifiers() );
+	InlineValueDecl( const InlineValueDecl & other );
+	virtual ~InlineValueDecl();
+
+	virtual Type * get_type() const override { return type; }
+	virtual void set_type(Type * newType) override { type = newType; }
+
+	static InlineValueDecl * newInlineValueDecl( const std::string & name, Type * type );
+
+	virtual InlineValueDecl * clone() const override { return new InlineValueDecl( *this ); }
+	virtual void accept( Visitor & v ) override { v.visit( this ); }
+	virtual void accept( Visitor & v ) const override { v.visit( this ); }
+	virtual DeclarationWithType * acceptMutator( Mutator & m )  override { return m.mutate( this ); }
+	virtual void print( std::ostream & os, Indenter indent = {} ) const override;
+	virtual void printShort( std::ostream & os, Indenter indent = {} ) const override;
+
+};
+
 std::ostream & operator<<( std::ostream & os, const TypeDecl::Data & data );
 
Index: src/SynTree/Mutator.h
===================================================================
--- src/SynTree/Mutator.h	(revision 5408b5919f1f591121d6cdabf6c6b5e605e61e6b)
+++ src/SynTree/Mutator.h	(revision e874605d8b0f66ad6050e4d03825b57912afe8ac)
@@ -36,4 +36,5 @@
 	virtual DirectiveDecl * mutate( DirectiveDecl * directiveDecl ) = 0;
 	virtual StaticAssertDecl * mutate( StaticAssertDecl * assertDecl ) = 0;
+	virtual DeclarationWithType * mutate( InlineValueDecl * inlineValueDecl ) = 0;
 
 	virtual CompoundStmt * mutate( CompoundStmt * compoundStmt ) = 0;
Index: src/SynTree/SynTree.h
===================================================================
--- src/SynTree/SynTree.h	(revision 5408b5919f1f591121d6cdabf6c6b5e605e61e6b)
+++ src/SynTree/SynTree.h	(revision e874605d8b0f66ad6050e4d03825b57912afe8ac)
@@ -38,4 +38,5 @@
 class DirectiveDecl;
 class StaticAssertDecl;
+class InlineValueDecl;
 
 class Statement;
Index: src/SynTree/Visitor.h
===================================================================
--- src/SynTree/Visitor.h	(revision 5408b5919f1f591121d6cdabf6c6b5e605e61e6b)
+++ src/SynTree/Visitor.h	(revision e874605d8b0f66ad6050e4d03825b57912afe8ac)
@@ -49,4 +49,6 @@
 	virtual void visit( StaticAssertDecl * node ) { visit( const_cast<const StaticAssertDecl *>(node) ); }
 	virtual void visit( const StaticAssertDecl * assertDecl ) = 0;
+	virtual void visit( InlineValueDecl * node ) { visit( const_cast<const InlineValueDecl *>(node) ); }
+	virtual void visit( const InlineValueDecl * valueDecl ) = 0;
 
 	virtual void visit( CompoundStmt * node ) { visit( const_cast<const CompoundStmt *>(node) ); }
Index: src/SynTree/module.mk
===================================================================
--- src/SynTree/module.mk	(revision 5408b5919f1f591121d6cdabf6c6b5e605e61e6b)
+++ src/SynTree/module.mk	(revision e874605d8b0f66ad6050e4d03825b57912afe8ac)
@@ -42,4 +42,5 @@
       SynTree/Initializer.cc \
       SynTree/Initializer.h \
+      SynTree/InlineValueDecl.cc \
       SynTree/Label.h \
       SynTree/LinkageSpec.cc \
